2015-12-14 88 views
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的字符?

+1

那麼*文件的編碼是什麼?這聽起來好像不是實際的UTF-8 ... –

+0

@JonSkeet - 文件中的數據是從默認字符集UTF-8的數據庫中獲取的。 – Cryssie

+1

這並不意味着該文件已被*保存在UTF-8中。該錯誤消息強烈表明該文件不是有效的UTF-8文件。現在我們不知道你是如何從數據庫中獲得文件的... –

回答

0

如果你有興趣只是你輸入文件的ASCII部分,你可以使用

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

這應該忽略不兼容的ASCII字符所有。 open()的Python文檔爲您提供了更多可能需要查看的選項。