2017-02-08 45 views
0

我需要使用Python讀取csv文件的內容。然而,當我運行此代碼:如何解決編碼問題?

with(open(self.path, 'r')) as csv_file: 
    csv_reader = csv.reader(csv_file, dialect=csv.excel, delimiter=';') 
    self.data = [[cell for cell in row] for row in csv_reader] 

我得到這個錯誤:

File "C:\Python36\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1137: character maps to <undefined> 

我的理解是,這個文件不是在CP-1252編碼,我需要找出編碼是什麼用過的。我嘗試了一堆東西,但現在沒有任何工作。

有關文件:

  • 它是由外部公司發送的,我不能有更多的相關信息。
  • 它配備了其他類似的文件,與我沒有任何問題,當我運行相同的代碼
  • 它有一個.xls擴展名,但與分號分隔多個csv文件
  • 當我打開它在Excel中以兼容模式打開。但是我沒有看到任何類型的編碼問題:一切都顯示正確。

我已經嘗試過:

  • 不同的文件格式下保存它擺脫兼容模式
  • 在我的第一行代碼添加一個編碼的:(我試圖或多或少隨機一些編碼,我知道的)

    與(開放(self.path, 'R',編碼= 'UTF8'))作爲csv_file:

  • 將文件內容複製到新文件或刪除文件的全部內容。仍然不起作用。這真的讓我感到困惑,因爲我覺得它意味着問題不在文件的內容中,而不在文件本身中。

  • 隨處搜尋如何解決這類問題。
+0

您可以嘗試使用'pandas'或'openpyxl'讀取文件。 –

+0

Python 2或Python 3? (可能是相關的)。 – nigel222

+0

如果它在Excel中正確打開,請嘗試從Excel保存到另一個CSV文件。這可能會解決編碼問題,而無需查明確切的問題。或者它可能不會... – nigel222

回答

0

我終於找到某種解決辦法:!

  1. 開放與Excel
  2. 顯示該文件的文件中正確使用「文本到列」功能
  3. 將文件保存爲csv格式
  4. 運行t他的代碼是

這並不完全符合我的要求,但它有效。 我仍然不明白問題實際是什麼,爲什麼這個問題解決了,所以我對任何額外的信息都感興趣!

0

我推薦使用熊貓庫(以及numpy),它在數據操作方面非常方便。該函數從xlsx或csv文件類型導入數據。

/\根據您的需求變化datapath/\

import os 
import pandas as pd 

def GetData(directory, dataUse, format): 
    dataPath = os.getcwd() + "\\Data\\" + directory + "\\" + dataUse + "Set." + format 
    if format == "xlsx": 
     dataSet = pd.read_excel(dataPath, sheetname = 'Sheet1') 
    elif format == "csv": 
     dataSet = pd.read_csv(dataPath) 
    return dataSet 
+0

它不能解決問題。我在pandas.parser.TextReader .__ cinit__(pandas \ parser.c:6086)中得到錯誤消息: 'File「pandas \ parser.pyx」,第535行, 文件「pandas \ parser.pyx」,第740行,在pandas.parser.TextReader._get_header(pandas \ parser.c:9266) UnicodeDecodeError:'utf-8'編解碼器無法解碼0位字節0xd0:無效繼續字節' – adurivault

+0

你知道你的文件是如何編碼的嗎? –

+0

不,我不...我一直在試圖找出,但我沒有成功, – adurivault