Python 大文件拆分,分类,存储
一、对可迭代对象简易理解
我们以 hello word字符串进行试验:
————————————————————————————————————————————————————————
# method1:
lst_iter = iter('hello world') # 用iterate() 生成迭代器
for i in lst_iter:
print(i)
————————————————————————————————————————————————————————
# method2:
lst_iter = iter('hello world')
loop = True
while loop:
try:
print(next(lst_iter))
except StopIteration:
loop = False
————————————————————————————————————————————————————————
# method1 和 method2 运行结果一致为:
h
e
l
l
o
w
o
r
l
d
二、进行大文件的拆分,存储
需要使用 pandas模块中 chunksize或者iterator参数, 还需使用groupby() 方法。
# 演示案例 <可迭代对象,进行遍历>
lst_iter = iter('hello')
print(next(lst_iter))
print('***********************')
for i in lst_iter:
print(i)
————————————————————————————————————————————————————————
# 运行结果
h
***********************
e
l
l
o
import pandas as pd
import numpy as np
# 逐步读取文件
table = pd.read_csv(r'D:\Program Files\vscodeworkspace\激光雷达\
原始数据\WindSpeed20181028.csv', index_col=0, chunksize=1600)
''' 对存储文件的数据进行重新写入,防止重复执行,追加在原有数据上 '''
df = next(table)
groupby = df.groupby(by='Distance') # 分组
for value, group in groupby:
filename = './拆分数据/' + str(value) + '.csv' # 命名
''' 取出第一个 部分数据,写入保存 header '''
group.to_csv(filename, sep=',', mode='w') # 存储
for df in table:
groupby = df.groupby(by='Distance')
for value, group in groupby:
filename = './拆分数据/' + str(value) + '.csv'
''' for 循环追加不需要 header,需要申明 '''
group.to_csv(filename, sep=',', header=None, mode='a') # 存储
参考
撰写 参考了 python使用chunk进行大文件的读写,代码如下:
# python使用chunk进行大文件的读写
reader = pd.read_csv('test.csv', iterator=True,low_memory=False)
loop = True
chunkSize = 100000
chunks = []
while loop:
try:
chunk = reader.get_chunk(chunkSize)
chunks.append(chunk)
except StopIteration:
loop = False
print("迭代停止。")
df = pd.concat(chunks, ignore_index=True)