2017-07-27 42 views
0

我試圖將TSV文件的所有行讀取到列表中。但是,TSV閱讀器提前終止並且不能讀取整個文件。我知道這是因爲data只是整個文件長度的1/6。發生這種情況時不會發生錯誤。當我手動檢查它終止的行時(對應的長度爲data,這些行有大量的Unicode符號,我想我可以捕獲一個UnicodeDecodeError,但不是拋出一個錯誤,而是退出閱讀整個文件完全我想象它是觸發一個觸發文件結束的東西??CSV在Windows上默默不讀取Python上的所有行

什麼是真的引發我一個循環:錯誤只發生在我在Windows Server 2012上使用Python 2.7時。文件讀取100%完全在Python 2.7的Unix實現上使用下面的代碼片段,我在內部運行這個內部的蟒蛇。

這是我試過的既不工作:

data = [] 

with open('data.tsv','r') as infile: 
    csvreader = csv.reader((x.replace('\0', '') for x in infile), 
    delimiter='\t', quoting=csv.QUOTE_NONE) 

    data = list(csvreader) 

我也試着讀一行行...

with open('data.tsv','r') as infile: 
for line in infile: 
    try: 
     d = line.split('\t') 
     q = d[0].decode('utf-8') #where the unicode symbols are located 
     data.append(d) 
    except UnicodeDecodeError: 
     continue 

提前感謝!

回答

1

按照一般建議從the documentation

如果csvfile是,它必須與上平臺上的「b」標記,其中有差別被打開的文件對象。

因此,與打開文件:

with open('data.csv', 'rb') as infile: 
    csvreader = csv.reader(infile, delimiter='\t', quoting=csv.QUOTE_NONE) 
    data = list(csvreader) 

此外,你將不得不如果他們有Unicode數據來解碼你的字符串,或只使用unicodecsv作爲一個下拉更換,所以你不必擔心它。

+0

太棒了。我完全忘了'r'和'rb',因爲Unix很多時候都讓我對它懶惰。切換標誌使其讀取整個文件。非常感謝! – Stevie

相關問題