对于特大的(4GB以上)json文件,或者txt文件,Python往往不太好直接处理,如果整个文件读取很可能会导致服务器内存爆满,本地主机也会导致memory错误,因为采用分块的方式读写文件,会更加灵活,并且也可以一边读一边使用,节约时间。下面提供两种方案对大的json文件进行读写。
# !/usr/bin/env Python
import config
import redis
import base64
import re
# 读写json文件
try:
redis_pool = redis.Redis(host=config.redis_host, port=config.redis_port, password=config.redis_password)
except Exception as e:
print('链接redis出错:{}'.format(e))
f = open("../result3.json", 'r', encoding='utf-8')
#result2.json里面存储的都是种子url,读取以后文件通过base64编码以列表的格式lpush写入redis
# 按块读取
while True:
try:
#按快读取每次1024b个字节
block = f.read(1024)
result = re.findall('({.*})', block)
for i in result:
print('写入redis成功:{}'.format(i))
bs64_result = base64.b64encode(i.encode('utf-8'))
redis_pool.lpush(config.indexdata, bs64_result)
except StopIteration:
False
print('文件读写结束')
# 按行读取
f = open("../result3.json", 'r', encoding='utf-8')
while True:
try:
block = f.readline()
result = re.search('({.*})',block).group(0)
print('写入redis成功:{}'.format(result))
bs64_result = base64.b64encode(result.encode('utf-8'))
redis_pool.lpush(config.indexdata, bs64_result)
except StopIteration:
False
print('文件读写结束')