我正在尝试处理一个大文件的行数差异。具体来说,我想知道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()
检查返回相同的计数。我是否超过了系统限制?
答案 0 :(得分:0)
你没有给我们足够的信息以确定,但我打赌它是这样的:
这两种计算行的方法之一,你要么(a)在首先创建文件的同一个脚本中执行,要么(b)在创建脚本仍在运行时运行计数脚本。
并且,考虑到你泄漏文件而没有在阅读时将其关闭:
reader = csv.reader(open('somefile.txt'), delimter='\t')
我敢打赌你在写作时也会做同样的事情,也许是:
writer = csv.writer(open('somefile.txt', 'w'), delimter='\t')
在这种情况下,文件可以围绕打开。即使创建代码完成了写入数据并打印“完成写入”的循环,最后一行缓冲区也可能位于某个缓冲区中,而不是写入磁盘。所以,当你尝试阅读整个文件时,你只是在阅读实际存在的内容 - 也就是说,一个缓冲区的行数比你想要的少。