繁体   English   中英

使用CSV时的行数差异

[英]Line count discrepancy when using csv

我遇到了要处理的大文件的行数差异。 具体来说,我想知道csv文件中的某一行是空白还是具有值。

标准行数-

with open('somefile.txt') as filein:
    lines = sum(1 for line in filein)

-返回:

796330

用于检查值是否存在的脚本-

import csv
import sys

csv.field_size_limit(sys.maxsize)
reader = csv.reader(open('somefile.txt'), delimter='\t')

hasvalue, novalue, i = 0, 0, 0

for row in reader:
    i+=1
    if not row[1]:
        novalue += 1
    else:
        hasvalue +=1

print hasvalue
print novalue
print i

-返回总行数的不同计数:

699512
95406
794918

row [1]中的值应为整数,但isdigit()检查将返回相同的计数。 我是否超出系统限制?

您没有给我们足够的信息来确定,但是我敢打赌,它是这样的:

这两种计算行数的方法之一是(a)在最初创建文件的同一脚本中进行操作,或者(b)在创建脚本仍在运行时运行计数脚本。

而且,鉴于您泄漏了文件而没有在读取时关闭它:

reader = csv.reader(open('somefile.txt'), delimter='\t')

我敢打赌,您在写作时也会做同样的事情,也许是:

writer = csv.writer(open('somefile.txt', 'w'), delimter='\t')

在这种情况下,文件可能处于打开状态。 即使创建代码已完成写数据并打印“完成写入”的循环,最后一行充满行的缓冲区也可能位于某个缓冲区中,而不是写入磁盘。 因此,当您尝试读取整个文件时,您仅读取的是实际存在的内容,也就是说,一个缓冲区的行数比您想要的少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM