我正在运行我的python程序有问题

时间:2011-03-20 02:52:54

标签: python programming-languages

从输入文件我想只提取学生的第一个名字,然后将结果保存在一个名为“student - firstname.txt”的新文件中。输出文件应该包含一个列表 名字(不包括中间名)。我能够删除姓氏,但我有问题删除中间名任何帮助或建议?

文件中的学生姓名看起来像这样(姓氏,名字和中间名首字母)

  

马丁,约翰

     

史密斯,詹姆斯W。

     

布朗,阿什利S。

我的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 个答案:

答案 0 :(得分:1)

用空格拆分令牌[1]。

fname = token[1].split(' ')[0]

答案 1 :(得分:1)

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()

答案 2 :(得分:1)

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语句确保即使出现异常也始终关闭文件。对于旧的Python版本,您可能需要contextlib.nested()

  • '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

答案 3 :(得分:0)

结帐regular expressions。这样的事情可能会奏效:

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

第3行基本上说找到一个单词字符序列作为组0,然后是逗号,一些空格字符和另一个单词字符序列作为组1,后跟nameline中的任何内容。

答案 4 :(得分:0)

f = open("file")
o = open("out","w")
for line in f:
    o.write(line.rstrip().split(",")[1].strip().split()+"\n")
f.close()
o.close()