python讀取大文件只能讀取部分的問題


最近准備重新研究一下推薦系統的東西,用到的數據集是Audioscrobbler音樂數據集。我用python處理數據集中artist_data.txt這個文件的時候,先讀取每一行然后進行處理:

with open('artist_data.txt','r')as f:

  for line in f:

    process(line)#對每行進行的具體處理

但是我發現每次都處理一部分數據就停止了,也就是本來有一百多萬行數據結果只處理了八千多行。我定位到了處理結束的那一行,發現數據有一個用 SUB 標記的亂碼,如圖所示:
多次查找之后我發現這個文件中這樣的符號還不止一個。
 
這個問題在網上很難找到相關的討論,最后終於從一個論壇大家的回復中找到了答案。說,所有的Windows系統都會把SUB(ASCII 26)當做標准文本的末尾來處理,這樣的存在主要是為了某種兼容性考慮。而Python中用‘r’模式讀文件就是以標准文本進行處理,所以會遇到這個問題。如果用‘rb’的二進制讀取方式就不會有問題了,也就是應該這樣:
   with open('artist_data.txt','rb')as f:
順便說一下,這樣的問題在大多數支持POSIX標准的Linux中是不會出現的,因為Linux中把所有的文件都當做二進制文件處理的,r和rb兩種讀取模式沒有本質上的區別。至此,這個問題得到了解決,雖然解決的方式很簡單,但是知道為什么要這樣解決可是費了好大的功夫,鑒於網上相關的討論很少,自己記錄下來。
 
感謝這個論壇中各位大神的積極討論:https://www.v2ex.com/t/157187


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM