0

我有一个 txt 文件和一个字典,其中键是形容词,值是它们的同义词。我需要用它们的同义词替换我在给定 txt 文件中遇到的字典中的常用形容词 - 随机!并将两个版本 - 带有更改和未更改的形容词 - 逐行 - 保存在一个新文件(task3_edited_text)中。我的代码:

#get an English text as a additional input
filename_eng = sys.argv[2]
infile_eng = open(filename_eng, "r")
task3_edited_text = open("task3_edited_text.txt", "w")

#necessary for random choice
import random 

#look for adjectives in English text
#line by line
for line in infile_eng:
    task3_edited_text.write(line)
    line_list = line.split()
    #for each word in line
    for word in line_list:
        #if we find common adjectives, change them into synonym, randomly
        if word in dict.keys(dictionary):
            word.replace(word, str(random.choice(list(dictionary.values()))))
        else:
            pass
    task3_edited_text.write(line)

问题在于输出形容词没有被它们的值代替。

4

1 回答 1

0
line_list = line.split()
...
task3_edited_text.write(line)

问题是您尝试修改line_listline. 但是,line_list它只是一个通过复制从line;生成的值制成的列表。修改它丝毫没有改变line。因此,写入line文件会将未修改的行写入文件,并且不会考虑您的更改。

您可能希望生成一个line_to_writefrom line_list,并将其写入文件,如下所示:

line_to_write = " ".join(line_list)
task3_edited_text.write(line_to_write)

此外,line_list甚至不会在您的代码中进行修改,因为word它是元素的副本,line_list而不是对原始元素的引用。此外,replace返回一个字符串的副本并且不修改您调用它的字符串。您可能希望line_list通过元素的索引进行修改,如下所示:

for idx, word in enumerate(line_list):
    #if we find common adjectives, change them into synonym, randomly
    if word in dict.keys(dictionary):
        line_list[idx] = word.replace(word, str(random.choice(list(dictionary.values()))))
    else:
        pass
于 2020-11-08T10:44:24.413 回答