我已经完成了所有工作,但最后一步是让它将行写入文件。任何帮助都是极好的。我认为它要么是函数问题,要么是控制结构问题。
def process(word, file_name, new_file_name):
'''Check the file for the word and returns lines with the word in it
'''
file=open(file_name, 'r')
file2=open(new_file_name, 'w')
for line in file:
if word in line:
file2.write(line)
else:
print("That word is not in this file.")
file.close()
print('File written')
def main():
global line
word=input('Enter a word: ').strip().lower()
file_name=input('Enter a file name: ')
new_file_name=input('Enter a new file name: ')
process(word, file_name, new_file_name)
main()
答案 0 :(得分:0)
您忘了关闭file2
。关闭它,它应该被写出来。
此外,打开和关闭文件的更好方法通常是使用with
上下文管理器:
with open(file_path, 'w') as my_f:
my_f.write('foo')
这将自行打开和关闭,在with
范围之外关闭。
此外,以这种方式编写main
更为标准:
if __name__ == '__main__':
main()
# or just the main body here if it's simple enough
原因是您可以在其他源代码中导入该文件,并且在导入后它不会执行main。您可以编写模块,从中导入模块或在main
中包含测试代码,然后直接执行该模块以进行测试。
此外,qwrrty对您的for
else
声明所说的是正确的。它将始终打印。
else
或for
循环中的while
是Python的一个有趣特性,无论好坏,您都不会在许多编程语言中看到它。如果循环 not 退出break
语句,它将执行。还有try
except
else
如果else
块完成而没有任何例外,则执行try
。
您应该使用else
来处理迭代容器,搜索元素以及在找不到逻辑时需要逻辑的情况。如果你找到它,那么你就完成了,break
。我没有在你的例子中看到else
的充分理由。
答案 1 :(得分:0)
通过简单测试此代码,它似乎按预期工作,并将file2
中与file
匹配的所有行写入word
。
此代码正在打印一条误导性消息:
for line in file:
if word in line:
file2.write(line)
else:
print("That word is not in this file.")
当迭代器用完时,else
到for
的{{1}}子句运行,所以这将始终打印“该字不在此文件中”。你想要更像这样的东西:
found = False
for line in file:
if word in line:
file2.write(line)
found = True
if not found:
print("That word is not in this file.")
如上所述,确保在完成后关闭file2
也是一个好主意,并且with open(...) as file2
上下文管理器对此非常有用。但这应该导致程序在这种情况下行为不端。