我读了一个包含多行的文件,以np.loadtxt
表示文件名
例如,txt文件的内容为:
000914_0017_01_0017_P00_01.tifresize.jpg
000925_0017_01_0006_P00_01.tifresize.jpg
000919_0017_01_0012_P00_01.tifresize.jpg
该txt文件的文件名为split_file_name
。
我使用for循环来解码每个文件名,并对每个图像进行一些处理,如下所示:for file_name in list(np.loadtxt(split_file_name, dtype=bytes)): file_name.decode("utf-8") # other processing...
list(np.loadtxt(split_file_name, dtype=bytes))
的输出为:
[b'000914_0017_01_0017_P00_01.tifresize.jpg',
b'000925_0017_01_0006_P00_01.tifresize.jpg',
b'000919_0017_01_0012_P00_01.tifresize.jpg']
但是,当文件split_file_name中只有一行时,如下所示:
000914_0017_01_0017_P00_01.tifresize.jpg
使用np.loadtxt()
后,输出为:
数组(b'000914_0017_01_0017_P00_01.tifresize.jpg',
dtype ='| S40')
在这种情况下使用list(np.loadtxt(split_file_name, dtype=bytes))
时
它失败了
TypeError:在0维数组上迭代。
原因是np.loadtxt
之后,它返回一个只有一个长字符串的numpy数组对象,但是list()无法将其直接转换为仅包含一个b'000914_0017_01_0017_P00_01.tifresize.jpg'
的列表。
如何确保仅适用于一行txt文件?
最佳答案
您可以使用tolist:
In [1]: [np.array(b'000914_0017_01_0017_P00_01.tifresize.jpg', dtype='|S40').tolist()]
Out[1]: ['000914_0017_01_0017_P00_01.tifresize.jpg']
更新:
您还可以使用flatten将其扩展/改进为以下内容:
In [2]: np.array([np.array(b'000914_0017_01_0017_P00_01.tifresize.jpg', dtype='|S40').tolist()]).flatten()
Out[2]:
array(['000914_0017_01_0017_P00_01.tifresize.jpg'],
dtype='|S40')
这也适用于loadtxt:
In [3]: np.array([np.loadtxt('split_file_name', dtype=bytes).tolist()]).flatten()
Out[3]:
array(['000914_0017_01_0017_P00_01.tifresize.jpg',
'000925_0017_01_0006_P00_01.tifresize.jpg',
'000919_0017_01_0012_P00_01.tifresize.jpg'],
dtype='|S40')