首页 > 解决方案 > 循环文件并分别保存

问题描述

我想在包含几千个文本文件的本地文件夹中循环,删除停用词,并将文件保存在子文件夹中。我的代码遍历所有文件,但将所有文本文件写入一个新文件。我需要将文件分开 - 因为它们在哪里,并且文件名完全相同,只是没有停用词。我究竟做错了什么?

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

标签: pythonpython-3.xglob

解决方案


原因是您在循环中使用相同的名称。您应该在每次迭代中更改文件名。例如你可以试试这个:

counter = 0 # This line added
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' + str(counter) + ".txt",'w', encoding='utf-8') # This line changed
    appendFile.write(new_words)
    appendFile.close()
    counter += 1 # This line added

这里发生的事情是:我们添加了一个计数器变量,并将该数字添加到每个文件名称的末尾。

在循环结束时,我们增加了counter用于分隔文件的值。

您可以尝试不同的方法,例如在新文件名的末尾添加原始文件名。


推荐阅读