擅长:python、mysql、java
<p><code>csv</code>库在读取文件时使用缓冲区,因此文件指针会在较大的块中跳转。它不会逐行读取文件。在</p>
<p>它以更大的块读取数据,以使解析更容易,而且由于新行可以嵌入引号中,所以逐行读取CSV数据将不起作用。在</p>
<p>如果您需要<em>提供进度报告,则需要预先计算行数。只有在输入CSV文件未在列值中嵌入换行符时,以下操作才有效:</p>
<pre><code>with open(FILE_PERSON, 'rb') as csvfile:
linecount = sum(1 for _ in csvfile)
csvfile.seek(0)
spamreader = csv.reader(csvfile)
for line, row in enumerate(spamreader):
print '{} of {}'.format(line, linecount)
</code></pre>
<p>还有其他方法可以计算行数(请参见<a href="https://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python">How to get line count cheaply in Python?</a>),但由于您将读取文件<em>并将其作为CSV处理,因此您也可以利用您打开的文件来实现这一点。我不确定以内存映射的形式打开文件,然后再次将其作为普通文件读取是否会有更好的效果。在</p>