Python 如何循环文件中的每一行并为这些行分配变量

Python 如何循环文件中的每一行并为这些行分配变量,python,Python,我试图读取文件的每一行,然后将每3行分配到相同的变量中。例如,我有一个文件,如下所示: james male 32 julie female 29 mark male 35 我想反复浏览列表,在相关行旁边打印出每一条记录,并注明姓名、性别和年龄,或者当我按姓名(即“James”)搜索时,我希望输出显示: name: james gender:male age: 32 到目前为止,我能够将文本文件中的所有行放入一个列表中,但我不知道如何迭代列表以将每行分配给变量name、gender、age

我试图读取文件的每一行,然后将每3行分配到相同的变量中。例如,我有一个文件,如下所示:

james
male
32
julie
female
29
mark
male
35
我想反复浏览列表,在相关行旁边打印出每一条记录,并注明姓名、性别和年龄,或者当我按姓名(即“James”)搜索时,我希望输出显示:

name: james
gender:male
age: 32
到目前为止,我能够将文本文件中的所有行放入一个列表中,但我不知道如何迭代列表以将每行分配给变量name、gender、age

fileList = []
print("This function prints the records out one by one")
file2 = open(fileName, "r")
file_line = file2.readlines()
file_line = [x.strip() for x in file_line]
for line in file_line:
    fileList.append(line)
print(fileList)
print("Name: {}\nGender:: {}\nAge: {}\n".format(fileList[0], fileList[1], fileList[2]))

这允许我在特别选择行在列表中的位置时访问这些行,但我希望它在整个列表中迭代并打印列表中的所有内容,或者在我按姓名搜索时打印特定的人员记录。解决方案的关键是,您需要一次读三行。幸运的是,由于文件对象的行为类似于迭代器,您只需在zip中使用openfile对象三次

with open(fileName) as infile:
    for name, gender, age in zip(infile, infile, infile):
        print("name:", name)
        print("gender:", gender)
        print("age:", age)

解决方案的关键是你需要一次读三行。幸运的是,由于文件对象的行为类似于迭代器,您只需在zip中使用openfile对象三次

with open(fileName) as infile:
    for name, gender, age in zip(infile, infile, infile):
        print("name:", name)
        print("gender:", gender)
        print("age:", age)

原则上,您要做的是以特定大小的块读取文件,在本例中,每个块读取3行。inspectorG4dget很好的回答让我想到了下面这个更通用但也更复杂的选项。借用,可以使用函数grouper从文件3中获取定义大小的块。在本例中:

从itertools导入zip\u def GROUPERTIABLE,n,fillvalue=无: 将数据收集到固定长度的块或块中 石斑鱼'ABCDEFG',3,'x'->ABC DEF Gxx args=[iteriterable]*n 返回zip_longest*参数,fillvalue=fillvalue 使用openfilename,“r”作为填充: chunks\u gen=grouperinfile,3,fillvalue= 对于块中的块\u gen: 打印名:{}性别:{}年龄:{}.format*chunk 还打印

Name: james
Gender: male
Age: 32

Name: julie
Gender: female
Age: 29

Name: mark
Gender: male
Age: 35

原则上,您要做的是以特定大小的块读取文件,在本例中,每个块读取3行。inspectorG4dget很好的回答让我想到了下面这个更通用但也更复杂的选项。借用,可以使用函数grouper从文件3中获取定义大小的块。在本例中:

从itertools导入zip\u def GROUPERTIABLE,n,fillvalue=无: 将数据收集到固定长度的块或块中 石斑鱼'ABCDEFG',3,'x'->ABC DEF Gxx args=[iteriterable]*n 返回zip_longest*参数,fillvalue=fillvalue 使用openfilename,“r”作为填充: chunks\u gen=grouperinfile,3,fillvalue= 对于块中的块\u gen: 打印名:{}性别:{}年龄:{}.format*chunk 还打印

Name: james
Gender: male
Age: 32

Name: julie
Gender: female
Age: 29

Name: mark
Gender: male
Age: 35

如果订单在某处发生变化,例如马克,36岁,男性,该怎么办?相信这种“结构”可能是危险的;如果你的“数据库”越来越大,有更多有用的格式,如csv、json……如果顺序发生变化,例如马克、36岁、男性,该怎么办?相信这种“结构”可能是危险的;如果您的“数据库”变得更大,则会有更多有用的格式,如csv、json……这非常有用,谢谢。我会尝试这个选项,inspectorG4dget解决方案可以满足我的需要,但这确实给了我一些新的东西可以使用。这非常有帮助,谢谢。我会尝试这个选项,inspectorG4dget解决方案可以满足我的需要,但这确实给了我一些新的东西。