簡體   English   中英

Python:如何讀取x編碼的文件並將其另存為utf-8

[英]Python: How can I read a file in x encoding and save it as utf-8

我在“ .csv”文件(使用管道而不是逗號)上有一個巨大的數據集(大約850萬個記錄),我不知道它的編碼是什么,因為我住在墨西哥並且有重音(áé... )我假設它是拉丁語或iso-8859-1。

當我嘗試使用熊貓將文件導入到DataFrame中時

bmc=pd.read_csv('file.csv', sep='|', 
            error_bad_lines=False, encoding='iso-8859-1')

它什么也沒讀:

    ÿþF     Unnamed: 1  Unnamed: 2  Unnamed: 3  Unnamed: 4
0   NaN     NaN         NaN         NaN         NaN
1   NaN     NaN         NaN         NaN         NaN
2   NaN     NaN         NaN         NaN         NaN

如果我不放置iso-8859-1或拉丁文,則會收到錯誤消息:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

因此,要將文件編碼為utf-8,我在Notepad ++中打開了可以讀取大文件的文件,然后手動刪除文件開頭的ÿþ,然后將編碼更改為utf-8並另存為新文件。

Notepad ++表示文件編碼為: UCS-2 LE BOM

文件大小從1.8Mb到約0.9Mb,現在我可以用熊貓打開此文件了,沒有問題。

因此,我認為轉換為utf-8應該是我預處理的一部分。

我使用了以下解決方案: 如何在Python中將文件轉換為utf-8? 並創建了一個轉換幾個文件的函數:

BLOCKSIZE = 1048576 # or some other, desired size in bytes

def convert_utf8(sourceFileName, targetFileName, sourceEncoding='iso-8859-1'):
    with codecs.open(sourceFileName, "r", sourceEncoding) as sourceFile:
        with codecs.open(targetFileName, "w", "utf-8") as targetFile:
            while True:
                contents = sourceFile.read(BLOCKSIZE)
                if not contents:
                    break
                targetFile.write(contents)

現在的問題是,在寫入文件時,它在每個有效字符后添加一個NULL字符,讓我在編輯器中顯示它:

在此處輸入圖片說明

當然,此文件在Pandas中不起作用。 到目前為止,我已經使用Notepad ++解決了我的問題,但是當然必須有更好的方法,我不必依賴其他工具。

要將文件從一種編碼轉換為另一種編碼,請執行以下操作:

with open('file1.txt',encoding='utf16') as fin:
   with open('file2.txt','w',encoding='utf8') as fout:
       fout.write(fin.read())

但是就您而言,正如Mark Ransom在評論中指出的那樣,只需使用適當的編碼即可打開:

bmc = pd.read_csv('file.csv', sep='|', error_bad_lines=False, encoding='utf16')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM