如何将numpy数组的长字符串转换为仅包含一个元素的列表

时间:2018-01-18 12:29:19

标签: python arrays list numpy

我读了一个文件,其中有多行代表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文件?

1 个答案:

答案 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')