Python 循环文件删除停止字
我想从本地文件夹中的多个文件中删除停止字。我知道如何处理一个文件,但我无法专心处理该文件夹中的所有文件 我尴尬地尝试:Python 循环文件删除停止字,python,python-3.x,Python,Python 3.x,我想从本地文件夹中的多个文件中删除停止字。我知道如何处理一个文件,但我无法专心处理该文件夹中的所有文件 我尴尬地尝试: 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
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 = open(afile)
line = file1.read()
words = word_tokenize(line)
words_without_stop_words = ["" if word in stop_words else word for word in words]
new_words = " ".join(words_without_stop_words).strip()
appendFile = open('subfolder/file1.txt','w')
appendFile.write(new_words)
appendFile.close()
我甚至不知道我能走多远,因为我得到:
回溯(最近一次呼叫最后一次):
文件“C:\Desktop\neg\sw.py”,第14行,在
line=file1.read()
文件“C:\Program Files\Python36\lib\encodings\cp1252.py”,第23行,解码
返回编解码器.charmap\u解码(输入、自身错误、解码表)[0]
UnicodeDecodeError:“charmap”编解码器无法对1757位置的字节0x9d进行解码:字符映射到
我尝试使用glob,但找不到好的文档。也许没有必要 似乎文件的编码错误。您需要使用正确的
编码kwarg调用函数(它可能是“utf-8”
)。当您想附加文件时,请使用'a'
。实际上,我会在使用文件之前打开附加文件,并在写入所有文件后关闭它
从stopwords筛选单词时,不要将空字符串放入列表中,只需忽略这些单词:
words_without_stop_words = [word for word in words if word not in stop_words]
new_words = " ".join(words_without_stop_words).strip()
似乎您的文件的编码错误。您需要使用正确的编码kwarg调用函数(它可能是“utf-8”
)。当您想附加文件时,请使用'a'
。实际上,我会在使用文件之前打开附加文件,并在写入所有文件后关闭它
从stopwords筛选单词时,不要将空字符串放入列表中,只需忽略这些单词:
words_without_stop_words = [word for word in words if word not in stop_words]
new_words = " ".join(words_without_stop_words).strip()
您必须在写入文件(即utf-8
时添加编码格式,通常您可以使用
appendFile = open('subfolder/file1.txt','w', encoding='utf-8')
appendFile.write(new_words)
appendFile.close()
您必须将数据附加到文件中,以便所有数据都存储到单个文件中,而不是将数据写入文件中
您还可以使用编解码器插入文件,如
f = codecs.open(filename, encoding="utf-8")
然后插入数据。在写入文件(即utf-8
时,您必须添加编码格式。通常,您可以使用
appendFile = open('subfolder/file1.txt','w', encoding='utf-8')
appendFile.write(new_words)
appendFile.close()
您必须将数据附加到文件中,以便所有数据都存储到单个文件中,而不是将数据写入文件中
您还可以使用编解码器插入文件,如
f = codecs.open(filename, encoding="utf-8")
然后插入数据。从完整的stacktrace中,您使用的是带有西欧语言和默认Ansi代码页1252的Windows系统
您的一个文件包含一个0x9d字节。在读取时,Python尝试将文件字节解码为unicode字符串,但由于0x9d不是有效的CP1252字节而失败,因此出现错误
可以做些什么
正确的方法是识别有问题的文件并尝试识别其真正的编码。一种简单的方法是显示其名称:
for afile in glob.glob("*.txt"):
with open(afile) as file1:
try:
line = file1.read()
except UnicodeDecodeError as e:
print("Wrong encoding file", afile, e) # display file name and error
continue # skip to next file
...
或者,如果只有少数几个文件中的几个字才会发生错误,则可以忽略或替换有问题的字节:
for afile in glob.glob("*.txt"):
with open(afile, errors = "replace") as file1:
line = file1.read()
...
在完整的stacktrace中,您使用的是带有西欧语言和默认Ansi代码页1252的Windows系统
您的一个文件包含一个0x9d字节。在读取时,Python尝试将文件字节解码为unicode字符串,但由于0x9d不是有效的CP1252字节而失败,因此出现错误
可以做些什么
正确的方法是识别有问题的文件并尝试识别其真正的编码。一种简单的方法是显示其名称:
for afile in glob.glob("*.txt"):
with open(afile) as file1:
try:
line = file1.read()
except UnicodeDecodeError as e:
print("Wrong encoding file", afile, e) # display file name and error
continue # skip to next file
...
或者,如果只有少数几个文件中的几个字才会发生错误,则可以忽略或替换有问题的字节:
for afile in glob.glob("*.txt"):
with open(afile, errors = "replace") as file1:
line = file1.read()
...
我认为至少应该使用open('subfolder/file1.txt','a')
,因为每次使用“w”都会导致覆盖文件。我假设您正在同一个文件中存储所有不间断的字。显示错误消息很好,但最好给出完整的stacktrace,以了解在哪一行引发了错误。当谈到编码问题时,您还应该说明Python的确切版本和操作系统。错误消息表明输入文件不是Unicode文件。如果没有看到错误周围的单个字节,我们无法猜测它是什么。有关如何发布一个好的、定义明确的问题的疑难解答提示和说明,请参阅。@SergeBallesta更新了错误。我认为至少应该使用open('subfolder/file1.txt','a')
,因为每次使用“w”都会导致覆盖该文件。我假设您正在同一个文件中存储所有不间断的字。显示错误消息很好,但最好给出完整的stacktrace,以了解在哪一行引发了错误。当谈到编码问题时,您还应该说明Python的确切版本和操作系统。错误消息表明输入文件不是Unicode文件。如果没有看到错误周围的单个字节,我们无法猜测它是什么。有关如何发布一个好的、定义明确的问题的一些疑难解答提示和说明,请参阅。@SergeBallesta更新了错误。