CSV未在Windows上读取Python上的所有行

2024-10-01 11:34:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将TSV文件的所有行读取到列表中。但是,TSV读取器提前终止,而不是读取整个文件。我知道这一点,因为data仅为整个文件长度的1/6。发生这种情况时不会抛出错误

当我手动检查它终止的行(对应于data的长度)时,这些行有大量的Unicode符号。我原以为我可以捕获UnicodeDecodeError,但它没有抛出错误,而是完全停止读取整个文件。我想它击中了什么东西,触发了文件的结尾

真正让我感到困惑的是:只有在Windows Server 2012上使用Python 2.7时,才会出现错误。在使用下面两段代码的Python 2.7的Unix实现上,该文件的读取效果100%完美。我在两个方向上都在Anaconda内部运行

以下是我尝试过的,但都不起作用:

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

提前谢谢


Tags: 文件csvinfordatatsvas错误
1条回答
网友
1楼 · 发布于 2024-10-01 11:34:54

根据the documentation的一般性建议:

If csvfile is a file object, it must be opened with the ‘b’ flag on platforms where that makes a difference.

因此,请使用以下方法打开您的文件:

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

此外,如果字符串具有unicode数据,则必须对其进行解码,或者只使用^{}作为替换项,这样就不必担心了

相关问题 更多 >