python - 循环文件并分别保存
问题描述
我想在包含几千个文本文件的本地文件夹中循环,删除停用词,并将文件保存在子文件夹中。我的代码遍历所有文件,但将所有文本文件写入一个新文件。我需要将文件分开 - 因为它们在哪里,并且文件名完全相同,只是没有停用词。我究竟做错了什么?
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 甚至是解决方案?)。
解决方案
原因是您在循环中使用相同的名称。您应该在每次迭代中更改文件名。例如你可以试试这个:
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
用于分隔文件的值。
您可以尝试不同的方法,例如在新文件名的末尾添加原始文件名。
推荐阅读
- scala - Having only a JAR Maven Archetype file, how can it be generated a new project?
- python - Print/Warning for Null values with column name and count
- mysql - 列数与第 1 行的值数不匹配,但为什么呢?
- dart - json.decode 之后的空检查
- ios - ViewControllers、内存消耗和代码效率
- android - 传递类型数组时未加载图像
- amazon-web-services - 在 CloudFormation 模板中为“AWS::ApiGateway::Resource”指定 ParentId
- ios - 将数组与参考数组进行比较并删除重复项
- ios - 如果没有连接,为什么调用 swiftHTTP 响应处理程序?
- typo3 - TYPO3 felogin - 创建带有挂钩的自定义标记以根据语言呈现内容?