这将在不需要多处理的情况下满足您的要求,部分原因是您很可能不需要它。在
一个简单的基准使方案3在速度上成为赢家。在
选项1:import csv
import random
starting_points = [random.randint(0, 5) for i in range(3)]
read_nbr_of_lines = 2
for sp in starting_points:
print(‘random starting line: %s’%sp)
read_lines = 0
with open(‘large_csv.csv’) as cf:
lines = csv.reader(cf)
for nbr, line in enumerate(lines):
if nbr < sp – 1: continue
read_lines += 1
if read_lines > read_nbr_of_lines: break
print(nbr, line)
可能这会导致处理大量数据的速度很慢,但我不认为在使用csv模块时,你希望从一个随机的点开始就可以绕过这个问题。在
您可以绕过从字节0读取文件的事实,方法是使用f.seek(start_byte)对字节的起始点进行种子设定,然后用f.read(my_chunk_size)读取文件中的一大块字节。在这种情况下,为了得到一个新的行,您必须在随机的起始点之后通过new_line_char自己找到行,为这些行执行自己的解析器,并在读取的行数上保留一个计数器。在
选项2:
如果你的文件小于1GB&#