Python 将文件数据转换为列表

Python 将文件数据转换为列表,python,list,python-3.x,Python,List,Python 3.x,我有一个关于员工数据样本的文件。第一行是姓名,第二行是工资,第三行是人寿保险选择(Y/N),第四行是健康保险选择(PPOI,PPOF,None),并且重复。下面是该文件的一个片段: Joffrey Baratheon 190922 Y PPOI Gregor Clegane 47226 Y PPOI Khal Drogo 133594 N PPOI Hodor 162581 Y PPOF Cersei Lannister 163985 N PPOI Tyrion Lannister 109253

我有一个关于员工数据样本的文件。第一行是姓名,第二行是工资,第三行是人寿保险选择(Y/N),第四行是健康保险选择(PPOI,PPOF,None),并且重复。下面是该文件的一个片段:

Joffrey Baratheon
190922
Y
PPOI
Gregor Clegane
47226
Y
PPOI
Khal Drogo
133594
N
PPOI
Hodor
162581
Y
PPOF
Cersei Lannister
163985
N
PPOI
Tyrion Lannister
109253
N
PPOF
Jorah Mormont
61078
Y
None
Jon Snow
123222
N
None
def fileread(text):
    in_file = open(text, "r")
    permlist = []
    x = 1
    templist = []
    for line in in_file:
        line = line.strip()
        templist.append(line)
        if x == 4:
            permlist.append(templist)
            templist = []
            x = 1
        else:
            x+=1
    return (permlist)
def main ():
    EmpData = fileread("EmployeeData.txt")
    index = 0
    print (EmpData[index])
如何获取此文件数据并将每个数据类型(姓名、工资、人寿保险、健康保险)提取到四个单独的列表中?
目前,我的代码正在按员工创建多维列表,但我最终想要四个单独的列表。我目前的代码如下:

Joffrey Baratheon
190922
Y
PPOI
Gregor Clegane
47226
Y
PPOI
Khal Drogo
133594
N
PPOI
Hodor
162581
Y
PPOF
Cersei Lannister
163985
N
PPOI
Tyrion Lannister
109253
N
PPOF
Jorah Mormont
61078
Y
None
Jon Snow
123222
N
None
def fileread(text):
    in_file = open(text, "r")
    permlist = []
    x = 1
    templist = []
    for line in in_file:
        line = line.strip()
        templist.append(line)
        if x == 4:
            permlist.append(templist)
            templist = []
            x = 1
        else:
            x+=1
    return (permlist)
def main ():
    EmpData = fileread("EmployeeData.txt")
    index = 0
    print (EmpData[index])

计算总行数,除以四,得到要添加到列表中的人数

i = 0
while i < num_of_people:
    for a in range(0, num_of_people+1):
        namelist.append(i)
        i += 1
        salarylist.append(i)
        i +=1
        ...
i=0
而我的人数是:
对于范围内的(0,人数+1):
名称列表。附加(i)
i+=1
salarylist.append(i)
i+=1
...
像这样拆分数据时要小心。很容易弄糊涂。
您最好将这些数据存储到数据库中。

计算总行数,除以四,得到要添加到列表中的人数

i = 0
while i < num_of_people:
    for a in range(0, num_of_people+1):
        namelist.append(i)
        i += 1
        salarylist.append(i)
        i +=1
        ...
i=0
而我的人数是:
对于范围内的(0,人数+1):
名称列表。附加(i)
i+=1
salarylist.append(i)
i+=1
...
像这样拆分数据时要小心。很容易弄糊涂。
您最好将这些数据存储到数据库中。

您可以使用如下4种列表理解:

with open("file.txt",'r') as f:
    lines = f.readlines()

name_list = [lines[i].rstrip() for i in range(0,len(lines),4)]
salary_list = [lines[i].rstrip() for i in range(1,len(lines),4)]
life_ins_list = [lines[i].rstrip() for i in range(2,len(lines),4)]
health_ins_list = [lines[i].rstrip() for i in range(3,len(lines),4)]

您可以使用如下4种列表理解:

with open("file.txt",'r') as f:
    lines = f.readlines()

name_list = [lines[i].rstrip() for i in range(0,len(lines),4)]
salary_list = [lines[i].rstrip() for i in range(1,len(lines),4)]
life_ins_list = [lines[i].rstrip() for i in range(2,len(lines),4)]
health_ins_list = [lines[i].rstrip() for i in range(3,len(lines),4)]

您可以使用
itertools
库中的
islice
。它将允许您一次迭代4行的批

from itertools import islice
EmpData = []
headers = ['name', 'salary', 'life insurance', 'health insurance']
record = {}
counter = 1
with open('data.txt', 'r') as infile:
    while counter>0:
        lines_gen = islice(infile, 4)
        counter = 0
        hasLines = False;
        for line in lines_gen:
            record[headers[counter]] = line.strip()
            counter += 1
        EmpData.append(record)
index = 0
print (EmpData[index])

正如有人在这篇文章中抱怨学术上的不诚实行为一样,我想澄清的是,这是一个生产代码片段的简化版本,其灵感来源于以下答案:

您可以使用
itertools
库中的
islice
。它将允许您一次迭代4行的批

from itertools import islice
EmpData = []
headers = ['name', 'salary', 'life insurance', 'health insurance']
record = {}
counter = 1
with open('data.txt', 'r') as infile:
    while counter>0:
        lines_gen = islice(infile, 4)
        counter = 0
        hasLines = False;
        for line in lines_gen:
            record[headers[counter]] = line.strip()
            counter += 1
        EmpData.append(record)
index = 0
print (EmpData[index])

正如有人在这篇文章中抱怨学术上的不诚实行为一样,我想澄清的是,这是一个生产代码片段的简化版本,其灵感来源于以下答案:

这对我来说是非常有效的!我唯一的另一个问题是删除“\n”字符。要使用rstrip(),我将把它放在哪里?当我将其放置为lines=f.readlines().rstrip(“\n”)时,我会得到一个错误。这对于我来说非常有用!我唯一的另一个问题是删除“\n”字符。要使用rstrip(),我将把它放在哪里?当我将其放置为lines=f.readlines().rstrip(“\n”)时,会收到一个错误。请停止破坏此帖子。内容,连同答案,组成了一个新的整体,不应该再被撕开。停止破坏这篇文章。内容与答案一起构成了一个新的整体,不应再被撕裂。