我读了一个包含多行的文件,以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')

08-19 10:36