0

如果我只是向您展示我正在使用的文本文件和我拥有的代码,这将更容易理解。这是名为 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

4 回答 4

4

无论你在哪里阅读 using readline(),使用readline().strip()

于 2013-03-15T19:40:17.810 回答
1

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

于 2013-03-15T19:44:49.620 回答
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) 您的 main 函数可以改为编写

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'}]
于 2013-03-15T19:56:47.027 回答
0

附加.rstrip('\n')到您的readline呼叫中以清除换行符。

于 2013-03-15T19:42:46.233 回答