如何将长字符串的numpy数组转换为只有一个元素的list

2024-04-25 16:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我读取了一个文件,其中有多行用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']

但是,当文件分割文件名中只有一行时,如下所示:

000914_0017_01_0017_P00_01.tifresize.jpg

使用np.loadtxt()后,输出为:

array(b'000914_0017_01_0017_P00_01.tifresize.jpg', dtype='|S40')

在这种情况下使用list(np.loadtxt(split_file_name, dtype=bytes)), 它失败了

TypeError: iteration over a 0-d array.

原因是在np.loadtxt之后,它返回一个只有一个长字符串的numpy数组对象,但是list()不能将其直接转换为只包含一个b'000914_0017_01_0017_P00_01.tifresize.jpg'的列表

我应该如何确保它只适用于一行txt文件?你知道吗


Tags: 文件nametxtforbytes文件名nplist
1条回答
网友
1楼 · 发布于 2024-04-25 16:44:09

您可以使用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')

相关问题 更多 >