在Python中使用文本文件中的用户信息

在Python中使用文本文件中的用户信息,python,python-3.x,Python,Python 3.x,我有一个名为data.txt的文件,其中包含学生编号和姓名: 123, Bobbie Smith 456, Suzie Lan 789, Alex Palmer 我试图实现的是用如下句子打印这些信息: Bobbbie Smith has student number: 123 Suzie lan has student number: 456 Alex Palmer has student number: 789 因此,我尝试使用以下方法将data.txt上的每一行放在一个单独的列表中: f

我有一个名为data.txt的文件,其中包含学生编号和姓名:

123, Bobbie Smith
456, Suzie Lan
789, Alex Palmer
我试图实现的是用如下句子打印这些信息:

Bobbbie Smith has student number: 123
Suzie lan has student number: 456
Alex Palmer has student number: 789
因此,我尝试使用以下方法将data.txt上的每一行放在一个单独的列表中:

file = open("data.txt", "r")
studentInfo = file.readlines()
file.close()
lines = [[line] for line in studentInfo]

>>> print(lines)
[['123, Bobbie Smith\n'], ['456, Suzie Lan\n'], ['789, Alex Palmer']]
这是一个好的方向,还是我应该使用完全不同的方法来实现这一点?

您不希望将文件用作变量名,因为它是一个函数。所以你基本上忽略了它,谢谢@Mark Tolonen

您可以稍微修改它,然后使用上下文管理器读取文件,并使用string.format以可读的方式打印数据

with open("data.txt", "r") as f:
    lines = [line.split(',') for line in f.readlines()]

for s in lines:
    print '{} has student number: {}'.format(s[1].strip(), s[0].strip())
输出:

Bobbie Smith has student number: 123
Suzie Lan has student number: 456
Alex Palmer has student number: 789

我正在从行中剥离新行,因为print语句默认情况下会为每次迭代打印新行

使用csv避免剥离行

import csv

with open('data.txt', 'r', encoding='utf-8') as csv_f:
    reader = csv.reader(csv_f)

    for line in reader:
        print('{x[1]} has student number: {x[0]}'.format(x=line))

一种方法是使用numpy库

import numpy as np

x, y = np.loadtxt("data.txt", dtype = str, delimiter = ',', unpack = True)
for (i,j) in zip(x,y):
print(j+" has student number: "+i)

这里有两种方法可以实现您的目标:

如果您不需要存储处理后的行,只想直接打印输出:

with open("data.txt", "r") as f:
    for l in f.readlines():
        try:
            age, name = re.findall(r'\s*(\d+),\s*(.*)', l)[0]
            print('{} has student number: {}'.format(name, age))
        except:
            pass
如果要将处理后的行存储为元组列表,可以使用类似的方法:

with open("data.txt", "r") as f:
    lines = [v[0]
             for v in [re.findall(r'\s*(\d+),\s*(.*)', l) for l in f.readlines()] if v]
    for age, name in lines:
        print('{} has student number: {}'.format(name, age))

,这是为code ReviewFile发布代码的地方。在Python中,该文件不是关键字,否则您将无法分配给它。它是Python2中的一个函数,但这个问题被标记为Python3,它不再是一个函数;列出索引或范围。我认为这是因为例如第一行变成:['123,Bobbie Smith']。所以使用s[1]没有任何价值。@Tymo你说得对,我忘记拆分项目了。我已经用一个工作表更新了答案example@Tymo如果你觉得我的答案有帮助,请考虑一下,thanks@Vinny我做了,但由于我的声望不足15,是不可能公开展示帖子得分的。很抱歉