Python-如何使用open with语句打开文件

我正在研究如何在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允许将多个open()语句放在一个语句中with。你用逗号分隔。你的代码将是:

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来指定要返回的值。)

引入该语句时,Python 2.5 或Python 2.6 不支持open()与一起使用多个项目,但Python 2.7和Python 3.1或更高版本with支持使用多个项目with。

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

如果要编写必须在Python 2.5、2.6或3.0中运行的代码,则将with语句嵌套为建议的其他答案或使用contextlib.nested。

以上是 Python-如何使用open with语句打开文件 的全部内容, 来源链接: utcz.com/qa/428776.html

回到顶部