无法从csv文件中读取非ascii字符

时间:2015-12-14 08:39:25

标签: python csv python-3.x unicode character-encoding

我正在尝试读取每行包含一个句子的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标准的字符?

1 个答案:

答案 0 :(得分:0)

如果您只对输入文件的ascii部分感兴趣,可以使用

open(job_file, mode = 'r', encoding = 'ascii', errors = 'ignore')

这应该忽略所有不符合ascii的字符。 open()的Python文档为您提供了更多您可能想要查看的选项。