0

これは、私が作業しているテキスト ファイルとコードを示すだけで、はるかに理解しやすくなります。以下は、employees.txt という名前のテキスト ファイルです。

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

今、私は2つの機能を持っています。どうぞ:

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

を使用して読むところはどこでもreadline()、使用してくださいreadline().strip()

于 2013-03-15T19:40:17.810 に答える
1

.strip()引数がない場合、すべてのスペース/タブ/改行が削除されます

于 2013-03-15T19:44:49.620 に答える
1

[コミュニティ wiki、これは本当に長いコメントなので]

employee_read(1) ではなく、あなたの関数を呼び出します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'}]
于 2013-03-15T19:56:47.027 に答える
0

呼び出しに追加.rstrip('\n')readlineて、行から改行をサニタイズします。

于 2013-03-15T19:42:46.233 に答える