我有2个文件,一个是包含一些句子的文本文件。另一个是包含我想从文件中删除它们的单词的文件。首先我必须省略特殊的单词,然后将唯一的单词写入一个新文件,每个单词在一行中。这是我写的代码。但它不起作用。简单来说,我想首先省略一些单词,然后找到独特的单词。
file1 = open('c:/python34/SimilarityCorpus.txt','r')
file2 = open('c:/python34/ListOfStopWords.txt','r')
file3 = open('c:/python34/Output1.txt','w')
first_words=[]
second_words=[]
z=[]
for line in file1: # to write unique words
for word in line.split():
if word not in z:
z.append(word)
for line in file1:
words = line.split()
for w in words:
first_words.append(w)
for line in file2:
w = line.split()
for i in w:
second_words.append(i)
for word1 in first_words :
for word2 in second_words:
if word1==word2:
first_words.remove(word2)
for word in first_words:
file3.write(word)
file3.write(' ')
file1.close()
file2.close()
file3.close()
我知道这是基本的,但我是编程新手。
答案 0 :(得分:1)
欢迎编程!这是一个有趣的世界:)。我希望下面的答案可以帮到你。
首先,您希望获得每个独特的单词。在这里,set
对象可能对您有用。使用set
,您可以迭代每个单词并将其添加到集合中,而无需担心重复。
z = set()
for line in file1: # to write unique words
for word in line.split():
z.add(word)
根据我对您的代码的理解,您希望找到SimilarityCorpus
和ListOfStopWords
之间的差异,然后将其写入磁盘。由于您只对独特的单词感兴趣,并且不担心计数,因此sets
可以再次为您解救。
first_words = set()
for line in file1:
words = line.split()
first_words = first_words.union(words)
此处,sets().union(other_iterable)
操作简化了迭代新单词的需要。您也可以为second_words
执行此操作。
最后,你想要区分两组,这在Python中也是可用的。要做到这一点,你要么寻找:
first_words
中的second_words
或second_words
中缺少first_words
中没有的字词。在第一种情况下,你会这样做:
first_words.difference(second_words)
在第二种情况下,你会这样做:
second_words.difference(first_words)
有关集合的更多文档可以在Python文档中找到here。我鼓励你使用Python 3而不是2,我认为你是,所以继续坚持下去!
要写入磁盘,新行上的每个单词都可以执行以下操作:
for word in first_words:
file3.write(word)
file3.write('\n') # this will write a new line.
目前,您有以下代码模式:
file3 = open('/path/to/your/file.txt', 'w')
# do stuff with file3, e.g. write.
file3.close()
我可能会建议您这样做,而不是:
with open('/path/to/file3.txt', 'w') as file3:
# do stuff with file3.
这样,您无需显式打开和关闭文件; “with open”系列可以自动为您处理。
我相信其余的代码是正确的,用于从磁盘读取信息和向磁盘写入信息。
如果您可以更新您的问题以包含有关正在出现的错误的更多详细信息,那将非常有用!最后,无论你在这里找到什么最有用的答案,都不要忘记赞成/接受它(它不一定是我的,我很乐意简单地添加到信息语料库并在这里提供帮助)。