Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将只有一行的txt文件加载到不同类型的2d列表中_Python - Fatal编程技术网

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

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

我有一个保存在如下文本文件中的2d列表(显示前3个条目):

我希望将其加载到列表中,例如
列表[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'