我如何让这个程序用一个给定的单词写入文件?

时间:2013-12-11 05:03:19

标签: python function

我已经完成了所有工作,但最后一步是让它将行写入文件。任何帮助都是极好的。我认为它要么是函数问题,要么是控制结构问题。

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

2 个答案:

答案 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声明所说的是正确的。它将始终打印。

elsefor循环中的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.")

当迭代器用完时,elsefor的{​​{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上下文管理器对此非常有用。但这应该导致程序在这种情况下行为不端。