我创建了一个方法,它逐行读取一个文件,并检查它们是否都包含相同数量的分隔符(参见下面的代码)。该解决方案的问题在于,它是在每行的基础上工作的。考虑到我正在处理的一些文件的大小是千兆字节,这将需要一段时间来处理,是否有更好的解决方案1)验证所有行是否包含相同数量的分隔符2)不会导致任何内存不足问题。提前谢谢。你知道吗
def isValid(fileName):
with open(fileName,'rb') as infile:
for lineNumber,line in enumerate(infile,1):
count = line.count(',')
if lineNumber > 1 and prevCount != count:
# this line does not contain the same number of delimiters
return False
prevCount = count
return True
我刚刚注意到-如果你想坚持简单的逻辑-原始代码可以压缩一点:
不需要保留前一行的计数,因为只有一个差异就可以决定它。所以只保留第一行的delim计数。
然后,文件需要以文本文件(“r”)而不是二进制文件的形式打开。
最后,通过在循环之前预取第一行,我们可以放弃对
enumerate
的调用。你知道吗可以改用all和生成器表达式:
我提出了一种不同的方法(没有代码):
1以二进制文件的形式读取文件,以64 KB为单位
2计算区块中的行尾标记数
三。计算区块中分隔符的数量,但仅计算到最后一个EOL标记的位置
4如果两个数字不能等分,则停止并返回False
5在EOF时,返回True
由于您必须处理最后一个EOL标记和块末尾之间的“重叠”,因此逻辑比“暴力”方法要复杂一些。但在处理GBs时,它可能会得到回报。你知道吗
相关问题 更多 >
编程相关推荐