Python:将只有一行的txt文件加载到不同类型的2d列表中
我有一个保存在如下文本文件中的2d列表(显示前3个条目): 我希望将其加载到列表中,例如Python:将只有一行的txt文件加载到不同类型的2d列表中,python,Python,我有一个保存在如下文本文件中的2d列表(显示前3个条目): 我希望将其加载到列表中,例如列表[0][0]=“9b7rfs”,列表[1][1]=“quick brown fox”等。列表中的每个项目都用括号分隔。我发布了一个类似的问题(),但没有任何解决方案。所有内容实际上都在同一行,我需要文本保留空格。您可以尝试以下方法: data = [] with open('input.txt') as infile: for line in infile: data.append
列表[0][0]=“9b7rfs”
,列表[1][1]=“quick brown fox”
等。列表中的每个项目都用括号分隔。我发布了一个类似的问题(),但没有任何解决方案。所有内容实际上都在同一行,我需要文本保留空格。您可以尝试以下方法:
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)
此外,这将为您提供类似'quickbrownfox'
(前面有一个空格)的字符串。如果要删除这些空格,请将for循环中的行更改为:
data.append([element.strip() for element in line.strip('()\n').split(',')])
由于阻止文本文件内容成为有效Pyton表达式的所有因素都是括号之间缺少逗号,因此只需使用
str.replace()
方法填充逗号,并将结果字符串传递给ast.literal\u 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(')(', '),(')))
这将产生:
(('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))
如果有大量实体,最好使用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])
输出:
你不应该保存这么丑陋的东西。您应该尝试csv(删除“()”并添加换行符)。读取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'