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
, чтобы указать возвращаемое значение.)
Использование нескольких элементов open()
с with
не поддерживалось в Python 2.5, когда with
оператор был введен или в Python 2.6, но он поддерживается в Python 2.7 и Python 3.1 или новее.
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
.