循环浏览文件并分别保存

时间:2018-08-21 07:27:20

标签: python python-3.x glob

我想循环遍历带有数千个文本文件的本地文件夹,删除停用词,然后将文件保存在子文件夹中。我的代码遍历所有文件,但是将所有文本文件写入一个新文件。我需要将文件分开-放在哪里,并使用完全相同的文件名,而没有停用词。我在做什么错了?

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甚至是解决方案?)。

2 个答案:

答案 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')

学习时的解决方案:

enter image description here

我建议您看一下https://github.com/inducer/pudb,并按照循环的每一步执行。这样,您将看到并了解python的功能,在特定的时间点什么变量具有什么值等等。