我正在使用大型CSV。如何随机抽取一行 - 比方说,总共200行 - 并将它们重新组合成一个与原始结构相同的CSV?
答案 0 :(得分:1)
我将使用的程序如下:
答案 1 :(得分:1)
使用Resevoir Sampling随机抽样技术,该技术不要求所有记录都在内存中,或者知道实际的记录数。有了它,您可以逐个输入您的记录,然后概率地将它们选择到样本中。流耗尽后,输出最终的样本记录。该技术保证流中的每个记录具有与最终样本相同的概率。也就是说,它会生成一个简单的随机样本。
答案 2 :(得分:0)
您可以使用随机模块的random.sample方法随机化线偏移列表,如下所示。
import random
# Fetching line offsets.
# Courtesy: Adam Rosenfield's tip about how to read a HUGE text file.
# http://stackoverflow.com/questions/620367/
# Read in the file once and build a list of line offsets
line_offset = []
offset = 0
for line in file:
line_offset.append(offset)
offset += len(line)
file.seek(0)
# Part where you pick the random lines and copy to your new file
# My 2 cents.
randoffsets = random.sample(line_offset, 200)
with open('your_file') as f:
for k in randoffsets:
f.seek(k)
f.readline() # and append to your new file
你可以尝试使用linecache,如果它适合你,但由于linecache将整个文件读入内存我不知道它对6GB文件的效果如何。