У меня проблема с моей программой на Python, которую я запускаю - PullRequest
2 голосов
/ 20 марта 2011

Из входного файла я предполагаю извлечь только имя ученика, а затем сохранить результат в новом файле с именем «student -‐ firstname.txt». Выходной файл должен содержать список имена (не включают отчество). Мне удалось удалить фамилию, но у меня возникли проблемы с удалением отчества, какая-либо помощь или предложение?

имя студента в файле выглядит примерно так (фамилия, имя и отчество)

Мартин, Джон

Смит, Джеймс В.

Браун, Эшли С.

мой код Python:

f=open("studentname.txt", 'r')

f2=open ("student-firstname.txt",'w')

str = ''

for line in f.readlines():

     str = str + line

     line=line.strip()

     token=line.split(",")

     f2.write(token[1]+"\n")

f.close()

f2.close()

Ответы [ 5 ]

1 голос
/ 20 марта 2011
with open("studentname.txt") as f, open("student-firstname.txt", 'w') as fout:
    for line in f:
        firstname = line.split()[1]
        print >> fout, firstname

Примечание:

  • вы можете использовать оператор with, чтобы убедиться, что файлы всегда закрыты даже в случае исключения.Вам может потребоваться contextlib.nested() в старых версиях Python

  • 'r' - это режим по умолчанию для файлов.Вам не нужно указывать это явно

  • .readlines() читает все строки одновременно.Вы можете перебирать файл строка за строкой напрямую

Чтобы избежать жесткого кодирования имен файлов, вы можете использовать fileinput.Сохраните его в firstname.py:

#!/usr/bin/env python
import fileinput

for line in fileinput.input():
    firstname = line.split()[1]
    print firstname

Пример: $ python firstname.py studentname.txt >student-firstname.txt

1 голос
/ 20 марта 2011
f=open("studentname.txt", 'r')
f2=open ("student-firstname.txt",'w')

for line in f.readlines():
     token=line.split()
     f2.write(token[1]+"\n")
f.close()
f2.close()
1 голос
/ 20 марта 2011

Разделенный токен [1] с пробелом.

fname = token[1].split(' ')[0]
0 голосов
/ 20 марта 2011
f = open("file")
o = open("out","w")
for line in f:
    o.write(line.rstrip().split(",")[1].strip().split()+"\n")
f.close()
o.close()
0 голосов
/ 20 марта 2011

Оформить регулярные выражения . Нечто подобное, вероятно, будет работать:

>>> import re
>>> nameline = "Smith, James W."
>>> names = re.match("(\w+),\s+(\w+).*", nameline)
>>> if names:
...     print names.groups()
('Smith', 'James')

Строка 3 в основном говорит, что найти последовательность символов слова в качестве группы 0, за которой следуют запятая, несколько пробелов и еще одна последовательность символов слова в качестве группы 1, за которой следует что-либо в nameline.

...