无法正确保存文件

时间:2017-02-18 17:52:59

标签: python-3.x file

我有一个文本文件,其中包含有关故事的文字,我想找一个单词"喜欢"然后获取它后面的下一个单词并调用一个函数来查找该单词的同义词。这是我的代码:

file = 'File1.txt'
with open(file, 'r') as open_file:
    read_file = open_file.readlines()
    output_lines = []        

for line in read_file:
    words = line.split()
    for u, word in enumerate(words):
        if 'like' == word:
            next_word = words[u + 1]
            find_synonymous(next_word )

    output_lines.append(' '.join(words))
    with open(file, 'w') as open_file:
        open_file.write(' '.join(words)) 

我认为在文本中我唯一的问题,因为当我写一个包含单词(like)的句子时,它就起作用了(for example 'I like movies')。但是当我有一个文件包含很多句子并运行代码时,它会删除所有文本。任何人都可以知道哪里可能是问题

1 个答案:

答案 0 :(得分:0)

你有几个问题。 find_synonymous(next_word )不会替换列表中的单词,因此最多只会返回原始文本。您在open(file, 'w')循环内执行for,因此每行都会覆盖该文件。 next_word = words[u + 1]如果like恰好是该行的最后一个单词,则会引发索引错误,并且您不会处理下一行中所喜欢的内容继续的情况。

在此示例中,我跟踪“is_liked”状态。如果单词处于类似状态,则将其转换。这样,您就可以处理跨行分割的句子,而不必担心索引错误。该列表将写入循环外的文件。

file = 'File1.txt'
with open(file, 'r') as open_file:
    read_file = open_file.readlines()

output_lines = []        
is_liked = False

for line in read_file:
    words = line.split()
    for u, word in enumerate(words):
        if is_liked:
            words[u] = find_synonymous(word)
            is_liked = False
        else:
            is_liked = 'like' == word
    output_lines.append(' '.join(words) + '\n')

with open(file, 'w') as open_file:
    open_file.writelines(output_lines)