我想循环遍历带有数千个文本文件的本地文件夹,删除停用词,然后将文件保存在子文件夹中。我的代码遍历所有文件,但是将所有文本文件写入一个新文件。我需要将文件分开-放在哪里,并使用完全相同的文件名,而没有停用词。我在做什么错了?
import io
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import glob
import os
import codecs
stop_words = set(stopwords.words('english'))
for afile in glob.glob("*.txt"):
file1 = codecs.open(afile, encoding='utf-8')
line = file1.read()
words = word_tokenize(line)
words_without_stop_words = [word for word in words if word not in stop_words]
new_words = " ".join(words_without_stop_words).strip()
appendFile = open('subfolder/file1.txt','w', encoding='utf-8')
appendFile.write(new_words)
appendFile.close()
我看到文件名将是“ file1”(第11行)-我只是无法理解glob(如果glob甚至是解决方案?)。
答案 0 :(得分:1)
原因是您在循环中使用相同的名称。您应该在每次迭代中更改文件名。例如,您可以尝试以下方法:
[XMPPJID jidWithString:strAddDomain(recieverId)]]
这里发生的是:我们添加了一个计数器变量,并在每个文件名的末尾添加了该数字。
循环结束时,我们增加了XMPPMessage *xMessage = [[XMPPMessage alloc] init];
isTyping ? [xMessage addComposingChatState] : [xMessage addInactiveChatState];
[someXMPPRoom sendMessage:xMessage];
用于分隔文件。
您可以尝试其他操作,例如在新文件名的末尾添加原始文件名。
答案 1 :(得分:1)
快速解决方案:
import io
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import glob
import os
import codecs
stop_words = set(stopwords.words('english'))
for afile in glob.glob("*.txt"):
file1 = codecs.open(afile, encoding='utf-8')
line = file1.read()
words = word_tokenize(line)
words_without_stop_words = [word for word in words if word not in stop_words]
new_words = " ".join(words_without_stop_words).strip()
subfolder = getSubfolder(afile)
filename = getFilename(afile)
appendFile = open('{}/{}.txt'.format(subfolder,filename),'w', encoding='utf-8')
appendFile.write(new_words)
appendFile.close()
我从没使用过glob或编解码器,我相信您的问题出在最后三行代码中。您将常量字符串('subfolder / file1.txt')用作最终文件目标-这就是为什么您的结果位于一个文件中的原因。我用两个变量替换了目标路径。这些变量我从函数“ getSubfolder()”和“ getFilename()”中获取。您必须实现这些功能才能获取所需的文件名。
如果我正确理解您的目标,则文件名将保持不变,只是位于不同的文件夹中。然后您可以使用以下行:
appendFile = open('{}/{}.txt'.format('mysubfolder',afile),'w', encoding='utf-8')
学习时的解决方案:
我建议您看一下https://github.com/inducer/pudb,并按照循环的每一步执行。这样,您将看到并了解python的功能,在特定的时间点什么变量具有什么值等等。