python分块读取文件_Python:分块读取大文件

如果“N”只能开始一行,那么为什么不使用“simple”解决方案呢?(这听起来已经完成了,我正在努力加强/支持它;-)

也就是说,一次只读取一行,然后构建表示当前N个对象的数据。假设N=0和N=1加载后,将它们一起处理,然后移动到下一对(N=2,N=3)。唯一稍微有点棘手的是确保不要抛出一个读行。(决定结束条件(例如“N”)的读取行也包含下一个N的数据)。

除非需要查找(或者IO缓存被禁用,或者每个项目有大量的数据),否则没有理由不使用readline AFAIK。

快乐的编码。

下面是一些即兴代码,可能包含多个错误。在任何情况下,它都显示了使用最小化副作用方法的总体思路。# given an input and previous item data, return either

# [item_number, data, next_overflow] if another item is read

# or None if there are no more items

def read_item (inp, overflow):

data = overflow or ""

# this can be replaced with any method to "read the header"

# the regex is just "the easiest". the contract is just:

# given "N ....", return N. given anything else, return None

def get_num(d):

m = re.match(r"(\d+) ", d)

return int(m.groups(1)) if m else None

for line in inp:

if data and get_num(line) ne None:

# already in an item (have data); current line "overflows".

# item number is still at start of current data

return [get_num(data), data, line]

# not in item, or new item not found yet

data += line

# and end of input, with data. only returns above

# if a "new" item was encountered; this covers case of

# no more items (or no items at all)

if data:

return [get_num(data), data, None]

else

return None

用法可能类似于以下内容,其中f表示打开的文件:# check for error conditions (e.g. None returned)

# note feed-through of "overflow"

num1, data1, overflow = read_item(f, None)

num2, data2, overflow = read_item(f, overflow)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值