0
我想读取每行包含一句话的csv文件。每个句子可能包含诸如汉字之类的外来词。我想删除或忽略这些外来字符,并只返回英文单词或ASCII字。无法从csv文件读取非ASCII字符
的字符串可能如何模样的文件例:
'小心 Careful'
所需的输出:小心
import csv
from string import ascii_letters, punctuation
def remove_non_ascii(string):
ascii_letters = set(ascii_letters)
tokens = nltk.word_tokenize(string)
ascii_words = [word for word in tokens if any(letter in ascii_letters for letter in word)]
return ascii_words
with open(job_file, mode = 'r', encoding = 'utf8') as infile:
line_reader = csv.reader(infile)
for row in line_reader:
new_line = remove_non_ascii(row[1])
print (new_line)
if row[1]:
open(output_file, 'a', newline='', encoding = 'utf8') as outfile:
line_writer = csv.writer(outfile)
line_writer.writerow('')
这是当我运行代码,我得到的错误。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 2848: invalid start byte
如果我将编码从utf8更改为cp1252,因为中文字符转换为'????',错误消失。是否有可能删除这些不需要的字符并只返回符合ASCII的字符?
那么*文件的编码是什么?这听起来好像不是实际的UTF-8 ... –
@JonSkeet - 文件中的数据是从默认字符集UTF-8的数据库中获取的。 – Cryssie
这并不意味着该文件已被*保存在UTF-8中。该错误消息强烈表明该文件不是有效的UTF-8文件。现在我们不知道你是如何从数据库中获得文件的... –