Python 如何读取包含大约2000行元组的txt文件
我试图读取一个txt文件,其中包含大约2000行Python 如何读取包含大约2000行元组的txt文件,python,python-3.x,list,tuples,Python,Python 3.x,List,Tuples,我试图读取一个txt文件,其中包含大约2000行元组,每行包含一个元组 下面是“data.txt”中的前10行 我已成功地将Tuple的整行内容复制到列表,但Python默认将其存储为字符串的列表 以下是输出: ['(16, 21, 24, 42, 49)', '(2, 12, 40, 42, 45)', '(6, 19, 22, 36, 48)', '(2, 5, 20, 24, 33)', '(8, 12, 24, 28, 44)', '(3, 15, 29, 30, 37)', '(6,
元组
,每行包含一个元组
下面是“data.txt”中的前10行
我已成功地将Tuple
的整行内容复制到列表
,但Python默认将其存储为字符串
的列表
以下是输出:
['(16, 21, 24, 42, 49)', '(2, 12, 40, 42, 45)', '(6, 19, 22, 36, 48)', '(2, 5, 20, 24, 33)', '(8, 12, 24, 28, 44)', '(3, 15, 29, 30, 37)', '(6, 17, 30, 33, 43)', '(3, 15, 16, 29, 42)', '(17, 18, 20, 35, 39)', '(20, 21, 23, 43, 48)']
如何将字符串的列表
转换为元组的列表
。因为我想将一个元组的每个索引与整个元组的列表
进行比较,因此,如果索引的值匹配,我想将元组的索引
匹配的行号作为输出。因此,如果我从“data.txt”中提取第二个元组,即(2,12,40,42,45),我需要将它从列表中的下一个元组开始(即(6,19,22,36,48)]与元组的整个列表进行比较
例如:
如果我取第二个元组(2,12,40,42,45),我需要找到在元组的列表的其余部分的相同索引中,数字“2”出现在哪一行。数字“2”出现在第4行的下一行,数字“12”出现在第5行
我的代码用于将“data.txt”的内容复制到列表中。我还没有谈到比较部分。如果您建议一些方法来比较上面提到的元组
,这将非常有用
with open('Data.txt', 'r+') as file:
lines = file.readlines()
data = []
for line in lines:
data.append(line.strip())
print(data[:11]) # Printing only first 10 lines from 1999 lines
print(f"Number of tuples = {len(data)}")
您可以使用ast解析元组:
从ast导入文字\u评估
行=[]
以open('Data.txt','r+')作为文件:
对于文件中的行:
数据组=文字值(行)
行。追加(数据组)
您可以在每个元组中使用ast.literal\u eval
。在循环中,而不是data.append(line.strip())
只需执行data.append(ast.literal\u eval(line))
-您甚至不需要strip()
顺便说一句,请正确缩进您的代码。对不起,粘贴代码时,我忘记了使用它。@alani我将data.append(line.strip())替换为data.append(ast.literal_eval(line)),您的右边我将txt文件中的内容复制到列表中。谢谢你,所以muchIt被称为literal\u eval
,而不是eval\u literal
,而且你只从文件中读取了一行-OP的for
循环仍然是必需的。@pedroodrigues它与eval
不同-它特别避免了危险的东西。@pedroodrigues不是任何字符串,仅限文字。您添加了一个字符串,因此“(1,2,3)”
,但您需要一个元组,即(1,2,3)
(注意不要加引号)literal\u eval
解析字符串并返回python对象,只要它们是文本(在我在答案中链接到的文档中列出)。因此,它会将字符串转换为元组。
with open('Data.txt', 'r+') as file:
lines = file.readlines()
data = []
for line in lines:
data.append(line.strip())
print(data[:11]) # Printing only first 10 lines from 1999 lines
print(f"Number of tuples = {len(data)}")