簡體   English   中英

python文件open()引發非utf-8字符的異常

[英]python file open() throws exception for non utf-8 character

我寫了最簡單的python程序,顯示了需要幫助的錯誤。

lines_read = 0
urllist_file = open('../fall11_urls.txt', 'r')

for line in urllist_file:
    lines_read += 1
print('line count:', lines_read)

我在大多數文件上運行此文件,當然它可以按預期運行,但是“ fall11_urls.txt”是一個包含URL的1400萬行文本文件,每行一個。 其中一些行包含的文字似乎不是utf-8字符,我在下面引用了錯誤。 我需要訪問這些URL中的每個URL。什么是處理此問題的最佳方法。 這些URL可以是“任何”,有些是400個隨機字符,例如“ https://bbswigr.fty.com/_Kcsnuk4J71A/RjzGhXZGmfI/AAAARg/xP3FO-Xbt68/s320/Axolo.jpg”中的某些字符串,例如0x96我需要我的python程序對文件中的任何內容都具有較強的魯棒性(如果這很重要,則可以在Ubuntu 16.04上運行)

這是錯誤

Traceback (most recent call last):
  File "./count_lines.py", line 2, in <module>
    for line in urllist_file:
  File "/home/chris/.virtualenvs/cvml3/lib/python3.5/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 5529: invalid start byte

一點點信息iconv對於同一文件發現相同的問題。 見下文

$ iconv ../fall11_urls.txt >> /dev/null
iconv: illegal input sequence at position 1042953625

我當前的工作方式很丑。 我使用iconv查找問題,然后在vi中手動編輯文件,然后進行處理。 並繼續這樣做直到它干凈為止,但是我要處理的許多文件中都有數百萬行。 在我手動糾正它們之后,URL基本上可以正常工作,因此它們不是雜音或“翻轉位”。

回答我自己的問題,讓大家都知道有效的方法。 是的,在二進制文件中打開是可以的,但是我沒有一個“文本”文件。 我仔細閱讀了編碼,因為每個二進制字符值都是有效的,因此可以找到以下工作。 這是最安全的事情。

urllist_file = open('../fall11_urls.txt', 'r',   encoding="latin-1")

似乎任何人打開從別人那里得到的文本文件,都無法控制或事先知道里面的內容時,建議您使用“ latin-1”,因為在Latin-1中沒有無效的字節值。

謝謝。 用二進制打開的建議使我研究了open()接受的其他參數。 我是Python的新手,很驚訝地發現字符串只是字節列表。 (這是您在C語言中工作20年以上的條件所期望的。)

您嘗試過騙子方法嗎? 這應該工作。 urllist_file = open('../ fall11_urls.txt','rb')然后轉換為所需的任何格式

暫無
暫無

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

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