我在一个文本文件中保存了一个二维列表,看起来像这样(显示前三个条目):
('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),但无法获得任何有效的解决方案。一切实际上都在同一行上,我需要文本保留空格。
答案 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'