使用csv时的行数差异

时间:2013-12-14 00:25:18

标签: python

我正在尝试处理一个大文件的行数差异。具体来说,我想知道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()检查返回相同的计数。我是否超过了系统限制?

1 个答案:

答案 0 :(得分:0)

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

这两种计算行的方法之一,你要么(a)在首先创建文件的同一个脚本中执行,要么(b)在创建脚本仍在运行时运行计数脚本。

并且,考虑到你泄漏文件而没有在阅读时将其关闭:

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

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

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

在这种情况下,文件可以围绕打开。即使创建代码完成了写入数据并打印“完成写入”的循环,最后一行缓冲区也可能位于某个缓冲区中,而不是写入磁盘。所以,当你尝试阅读整个文件时,你只是在阅读实际存在的内容 - 也就是说,一个缓冲区的行数比你想要的少。