将文本文件转换为元组列表

Chr*_*s S 1 python string tuples file

我在将文本文件转换为元组列表时遇到问题。文本文件将采用以下格式,文件名为 data.txt

埃文斯·李 (Evans Lee) 喜剧演员 25,000
史密斯·威尔 (S​​mith Will) 演员 50,000
马克·李 (Mack Lee) 喜剧演员 30,000

我通过使用以下代码成功地部分实现了我的目标

load_file = open("data.txt", "r")
data = infile.read()
load_file.close()
data = tuple(item for item in data.split(' ') if item.strip())
print (data)
Run Code Online (Sandbox Code Playgroud)

然而,这并没有达到我想要的效果,它会产生以下输出

('Evans', 'Lee', 'Comedian', '25,000\nSmith', 'Will', 'Actor', '50,000\nMack', 'Lee', 'Comedian', '30,000')
Run Code Online (Sandbox Code Playgroud)

这只是一个包含换行符的大长元组,有没有一种方法可以使 data.txt 文件中的每一行都是它自己的元组,给我一个元组列表并摆脱换行符?

tob*_*s_k 5

如果您将read()整个文件放入一个大字符串中,则必须splitlines()首先:

data = [tuple(line.split()) for line in data.splitlines()]
Run Code Online (Sandbox Code Playgroud)

更好:不要将文件作为一个大字符串读取,而是直接迭代文件中的行:

with open("data.txt") as load_file:
    data = [tuple(line.split()) for line in load_file]
Run Code Online (Sandbox Code Playgroud)

更好的是:用于csv读取数据;这还允许您将包含空格的姓名或职位放入引号中:

import csv
with open("data.txt") as load_file:
    reader = csv.reader(load_file, delimiter=" ")
    data = [tuple(row) for row in reader]
Run Code Online (Sandbox Code Playgroud)