我正在研究如何用Python进行文件输入和输出.我编写了以下代码,将一个文件中的名称列表(每行一个)读入另一个文件,同时对照文件中的名称判断一个名称,并将文本附加到文件中的出现处.代码是有效的.能做得更好吗?

我希望对输入和输出文件都使用with open(...语句,但不知道它们怎么会在同一个挡路中,这意味着我需要将名称存储在一个临时位置.

def filter(txt, oldfile, newfile):
    '''\
    Read a list of names from a file line by line into an output file.
    If a line begins with a particular name, insert a string of text
    after the name before appending the line to the output file.
    '''

    outfile = open(newfile, 'w')
    with open(oldfile, 'r', encoding='utf-8') as infile:
        for line in infile:
            if line.startswith(txt):
                line = line[0:len(txt)] + ' - Truly a great person!\n'
            outfile.write(line)

    outfile.close()
    return # Do I gain anything by including this?

# input the name you want to check against
text = input('Please enter the name of a great person: ')    
letsgo = filter(text,'Spanish', 'Spanish2')

推荐答案

Python允许在单个with中放置多个open()条语句.用逗号分隔它们.然后,您的代码将为:

def filter(txt, oldfile, newfile):
    '''\
    Read a list of names from a file line by line into an output file.
    If a line begins with a particular name, insert a string of text
    after the name before appending the line to the output file.
    '''

    with open(newfile, 'w') as outfile, open(oldfile, 'r', encoding='utf-8') as infile:
        for line in infile:
            if line.startswith(txt):
                line = line[0:len(txt)] + ' - Truly a great person!\n'
            outfile.write(line)

# input the name you want to check against
text = input('Please enter the name of a great person: ')    
letsgo = filter(text,'Spanish', 'Spanish2')

不,在函数末尾加一个明确的return,你不会得到任何东西.你可以使用return提前退出,但你在最后有了它,函数将在没有它的情况下退出.(当然,对于返回值的函数,可以使用return来指定要返回的值.)

引入with语句时,Python2.5或Python2.6不支持将多个open()项与with一起使用,但Python2.7和Python3.1或更高版本支持.

http://docs.python.org/reference/compound_stmts.html#the-with-statement

如果您正在编写必须在Python 2.5、2.6或3.0中运行的代码,请按照其他答案的建议嵌套with条语句,或者使用contextlib.nested条语句.

Python相关问答推荐

如何将 5 个数字映射到 5 种不同的 colored颜色

Sympy 反函数:y = ax+b 变为 x = (y-b)/a

类实例的方法参数自动完成

如何确保 A 和 Bcsign 中至少有一个出现在正则表达式中?

如何在 Python 中替换字符串中的数字?

Pandas Mapping:基于树形结构添加后缀

Python pandas:来自 get_dummies 的动态连接

从嵌套 for 循环到字典理解?

Python:元组和单个浮点数的高效展开/展平列表

使用 Python OpenCV cv2.VideoCapture() 直接以灰度读取视频帧

动态拆分 DataFrame 的列并将其存储为新列

如何在字符的最后一个实例之后对文本文件进行排序?

Scrapy:无法将 json 导出到 csv

关于在 vs 代码中为 python 添加一个片段

如何按照空的倒置模式打印

TypeError:从文件中读取参数时,函数缺少所需的位置参数

使用列表在每个月内添加适当的天数

获取 ValueError:形状 (None, 1) 和 (None, 5) 不兼容

如何将普通数据框转换为烛台数据框?

如何使用python将数据转储到Json文件中