将文本文件读入字典,删除标题/尾随换行符

时间:2013-03-15 19:38:37

标签: python dictionary text-files

如果我只是向您展示我正在使用的文本文件和我拥有的代码,那么这将更容易理解。这是文本文件,名为employees.txt:

7
John
Doe
33
272838
M
Mary
Johnson
38
3849383
.....

现在我有两个功能。他们在这里:

def employee_write(file):
    employee_dict = {}
    employee_dict["First"] = file.readline()
    employee_dict["Last"] = file.readline()
    employee_dict["Experience"] = file.readline()
    employee_dict["ID"] = file.readline()
    employee_dict["Gender"] = file.readline()
    return employee_dict

def main():
    file = open("employees.txt", "r")
    n = int(file.readline())
    x1 = employee_write(file)
    employee_list = []
    for i in range(n):
        employee_list.append(x1)
        x2 = employee_list
    print(x2)

不幸的是,当我打印出字典列表时,我附加到第一个函数中的键的值都附带了换行符,如下所示:

[{'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}, {'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}, {'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}, {'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}, {'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}, {'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}, {'ID': '272838\n', 'Last': 'Doe\n', 'First': 'John\n', 'Experience': '33\n', 'Gender': 'M\n'}]

我该如何解决?

4 个答案:

答案 0 :(得分:4)

无论您使用readline()阅读的任何地方,请使用readline().strip()

答案 1 :(得分:1)

没有参数的

.strip()会删除所有空格/制表符/换行符

答案 2 :(得分:1)

[社区维基,因为这是一个很长的评论]

(1)我会调用您的函数employee_read而不是employee_write

(2)我可能会这样做,而不是所有重复:

def employee_read(source):
    keys = "First Last Experience ID Gender".split()
    employee_dict = {key: next(source).strip() for key in keys}
    return employee_dict

(3)你的主要功能可以写成

def main():
    with open("employees.txt") as fp:
        n = int(next(fp))
        employees = [employee_read(fp) for i in range(n)]
    print employees

给出了

>>> main()
[{'Gender': 'M', 'Last': 'Doe', 'ID': '272838', 'Experience': '33', 'First': 'John'},
{'Gender': 'F', 'Last': 'Johnson', 'ID': '3849383', 'Experience': '38', 'First': 'Mary'}]

答案 3 :(得分:0)

.rstrip('\n')附加到您的readline来电,以清理换行符。