gpt4 book ai didi

python - 从巨大的 CSV 文件中读取随机行

转载 作者:IT老高 更新时间:2023-10-28 22:11:21 27 4
gpt4 key购买 nike

我有一个非常大的 CSV 文件(15 Gb),我需要从中读取大约 100 万行随机行。据我所见 - 并实现 - Python 中的 CSV 实用程序只允许在文件中按顺序迭代。

将所有文件读入内存以使用一些随机选择非常消耗内存,并且遍历所有文件并丢弃一些值并选择其他值非常耗时,所以有没有办法选择一些随机CSV 文件中的行并只读该行?

我试过没有成功:

import csv

with open('linear_e_LAN2A_F_0_435keV.csv') as file:
reader = csv.reader(file)
print reader[someRandomInteger]

CSV 文件示例:

331.093,329.735
251.188,249.994
374.468,373.782
295.643,295.159
83.9058,0
380.709,116.221
352.238,351.891
183.809,182.615
257.277,201.302
61.4598,40.7106

最佳答案

import random

filesize = 1500 #size of the really big file
offset = random.randrange(filesize)

f = open('really_big_file')
f.seek(offset) #go to random position
f.readline() # discard - bound to be partial line
random_line = f.readline() # bingo!

# extra to handle last/first line edge cases
if len(random_line) == 0: # we have hit the end
f.seek(0)
random_line = f.readline() # so we'll grab the first line instead

正如@AndreBoos 所指出的,这种方法会导致选择有偏差。如果您知道行的最小和最大长度,则可以通过执行以下操作来消除此偏差:

假设(在这种情况下)我们有 min=3 和 max=15

1) 求上一行的长度(Lp)。

那么如果 Lp = 3,这条线最偏向于。因此,我们应该 100% 地使用它如果 Lp = 15,则该线最偏向。我们应该只选择 20% 的时间,因为它被选中的可能性要高出 5 倍。

我们通过随机保持行 X% 的时间来实现这一点:

X = min/Lp

如果我们不遵守规则,我们会再次随机选择,直到我们的掷骰结果正确为止。 :-)

关于python - 从巨大的 CSV 文件中读取随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com