CSV在Windows上默默不读取Python上的所有行

问题描述:

我试图将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 

提前感谢!

按照一般建议从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