[英]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.