Python:仅将1行的txt文件加载到2d不同类型的列表中

时间:2018-09-01 02:51:30

标签: python

我在一个文本文件中保存了一个二维列表,看起来像这样(显示前三个条目):

('9b7rfs', "29sdf dfs fdf sdf", 'http://imgur.com/gallery/SDsGdO7', '29', 'M', 1)('9b73bj', 'quick brown fox', 'https://i.redd.it/lfhg348cszi11.jpg', '18', 'M', 5)('9b418d', 'third string', 'https://imgur.com/a/DddTo6E', '36', 'm', 6)

我希望将其加载到列表中,例如list[0][0] = '9b7rfs'list[1][1] = 'quick brown fox'等。列表中的每个项目都用方括号分隔。我曾发布过类似的问题(Python: loading txt file into 2d list of different types),但无法获得任何有效的解决方案。一切实际上都在同一行上,我需要文本保留空格。

3 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

data = []
with open('input.txt') as infile:
    for line in infile:
        data.append(line.strip('()\n').split(','))

print(data[0][0])
print(data[1][1])

输出

'9b7rfs'
 'quick brown fox'

注释

此答案假设文本文件名为'input.txt',并且与.py文件位于同一目录中。格式还假设每行一个元组,如下所示:

('9b7rfs', "29sdf dfs fdf sdf", 'http://imgur.com/gallery/SDsGdO7', '29', 'M', 1)
('9b73bj', 'quick brown fox', 'https://i.redd.it/lfhg348cszi11.jpg', '18', 'M', 5)
('9b418d', 'third string', 'https://imgur.com/a/DddTo6E', '36', 'm', 6)

这还将为您提供'quick brown fox'之类的字符串(前面有一个空格)。如果要删除这些空格,请将for循环中的行更改为:

data.append([element.strip() for element in  line.strip('()\n').split(',')])

答案 1 :(得分:0)

由于所有阻止文本文件内容成为有效Pyton表达式的原因都是括号之间缺少逗号,因此您可以简单地使用str.replace()方法来填充逗号并将结果字符串传递给{ {1}}将其转换为元组的元组:

ast.literal_eval()

这将输出:

import ast
s = '''('9b7rfs', "29sdf dfs fdf sdf", 'http://imgur.com/gallery/SDsGdO7', '29', 'M', 1)('9b73bj', 'quick brown fox', 'https://i.redd.it/lfhg348cszi11.jpg', '18', 'M', 5)('9b418d', 'third string', 'https://imgur.com/a/DddTo6E', '36', 'm', 6)'''
print(ast.literal_eval(s.replace(')(', '),(')))

答案 2 :(得分:0)

如果实体数量很多,最好使用CSV文件。

data = open(r'data.txt','r')
list_2d = [j[1:].split(',') for j in a.split(')')]
print(list_2d[1][1])
print(list_2d[1][1])

退出:

'9b7rfs'
 'quick brown fox'