我读了一个文件,其中有多行代表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”, D型= '| S40')
在这种情况下使用list(np.loadtxt(split_file_name, dtype=bytes))
时,
它失败了
TypeError:在0-d数组上迭代。
原因是在np.loadtxt
之后它返回一个只有一个长字符串的numpy数组对象,但是list()无法将它直接转换为只包含一个b'000914_0017_01_0017_P00_01.tifresize.jpg'
的列表
我该如何确保它仅适用于一行txt文件?
答案 0 :(得分:2)
您可以使用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')