python读取超大csv文件_从Python中的巨大CSV文件中读取随机行

Maria Zverin..

27

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,则该线最偏向.因此,如果Lp = 15,我们应该100%的时间,这条线最偏向于.我们应该只占20%的时间,因为选择的可能性要高5倍.

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

X = min/Lp

如果我们不保留这条线,我们会做另一个随机选择,直到我们的骰子卷好.:-)

聪明,但这将为具有可变长度线的文件提供有偏见的结果. (4认同)

@ thg435:这不能解决任何问题.与短线之后的线相比,长线之后的线将不成比例地表示.此外,第一行将_never_被读取. (4认同)

@MariaZverina我认为要做出无偏的选择,你不仅要知道线的最小长度,还要知道文件中每个线长的频率.无论如何,在文件中,只有少于7个字符的值是0.我将尝试将我的文件转换为0替换为0.00000,然后您的例程应该完美. (3认同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值