Python 如何读取包含大约2000行元组的txt文件

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,

我试图读取一个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, 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)}")