当前位置: 首页 > 工具软件 > Bcolz > 使用案例 >

Python对bcolz 文件读写查删

通骁
2023-12-01

1、读取

import bcolz
import pandas as pd

ct = bcolz.open(rootdir=path)
'''
打开一个基于磁盘的carray / ctable。

参数: 
rootdir:路径名(字符串)
承载carray / ctable对象的目录。

mode:打开模式(字符串)
指定打开对象的模式。支持的值是:
 'r'为只读
 'w'清空以前的基础数据
 'a'允许在现有数据之上进行读写

返回: 
out:一个carray / ctable对象或IOError(如果没有找到对象)
'''
# 方法一
df = pd.DataFrame(ct)
# 方法二
df = ct.todataframe()

2、写入

方法一
ct4 = bcolz.ctable.fromdataframe(df, rootdir=path)

方法二
with bcolz.zeros(0, dtype="i4,f8", mode='w', rootdir=path) as ct2:
    new_col = np.linspace(0, 1, N)
    ct3.addcol(new_col)

'''
返回给定shape和type型的新的Carray对象,用0填充。

参数: 
shape:int
新阵列的形状,例如(2,3)。

dtype:数据类型,可选
数组所需的数据类型,例如numpy.int8。默认是 numpy.float64。

kwargs:参数或字典的列表
carray构造函数支持的任何参数。

返回: 
out:carray or ctable
具有给定shape和dtype的0的Bcolz对象。
'''

方法三
with bcolz.zeros(0, dtype="i4,f8", mode='w', rootdir=path) as ct3:
    for i in range(20000):
        ct1.append((i, i**2)
)


方法四
ct4 = bcolz.fromiter(
	((i,i*i) for i in range(N)), 
	dtype="i4,f8", 
	count=N, 
	rootdir=path
)


bcolz.fromiter(iterable,dtype,count,** kwargs )
'''
从可迭代对象创建一个carray / ctable 。

参数: 
iterable : iterable object
一个可迭代的对象,为数据提供数据。

dtype :numpy.dtype实例
指定结果对象的类型。

count:int
要从迭代中读取的项目数量。如果设置为-1,则意味着迭代将被使用,直到耗尽(不推荐,请参阅下面的注释)。

kwargs:list of parameters or dictionary
Carray / ctable构造函数支持的任何参数。

返回: 
out:一个carray / ctable对象
'''

3、查询

ct = bcolz.open(path)
# 方法一
df = ct.todataframe()
df = df.loc[(df.date>start)&(df.date<=end)]
# 方二
ct = ct.where('(date>{})&(date<={})'.format(start, end))
df = pd.DataFrame(ct)


where(self, boolarr, limit=None, skip=0)
'''
Iterator返回booleanr为true 的这个对象的值。
这目前仅适用于一维的布尔曲线。

参数: 
boolarr:布尔类型的Carray或NumPy数组
布尔值。
limit:int
要返回的元素的最大数量。默认是返回一切。
skip:int
要跳过的元素的初始数量。默认值是0。

返回: 
out:迭代器
'''

4、删除

# 删除最新多少个
ct = bcolz.open(rootdir=path)
count = 0
for i in range(len(ct) - 1, 0, -1):
   if ct["date"][i] >= int(date):
      count += 1
   else:
      break
ct.trim(count)
ct.flush
flush()
'''
将内部缓冲区中的数据刷新到磁盘。

这个调用通常应该在执行修改后(__settitem __(),append())在持久性模式下完成。
如果您不这样做,您可能会失去部分修改。
'''

# 删除名为name的列或pos位置。
delcol(name=None, pos=None, keep=False)
'''
参数: 
name: string, 可选
要删除的列的名称。
pos:int,可选
要删除的列的位置。
keep: boolean
对于支持磁盘的列:将数据保存在磁盘上?
'''

5、类型


类型         简写                描述
bool_       'b'          布尔型数据类型(True 或者 False)
int_        'i8'         默认的整数类型(int32 或 int64)
intc        'i4/i8'      一般是 int32 或 int 64
intp        'i4/i8'      用于索引的整数类型(一般情是 int32 或 int64)
int8        'i1'         字节(-128 to 127)
int16       'i2'         整数(-32768 to 32767)
int32       'i4'         整数(-2147483648 to 2147483647)
int64       'i8'         整数(-9223372036854775808 to 9223372036854775807)
uint8       'u1'         无符号整数(0 to 255)
uint16      'u2'         无符号整数(0 to 65535)
uint32      'u4'         无符号整数(0 to 4294967295)
uint64      'u8'         无符号整数(0 to 18446744073709551615)
float_      'f8'         float64 类型的简写
float16     'f2'         半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32     'f4'         单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64     'f8'         双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_    'c16'        complex128 类型的简写,即 128 位复数
complex64   'c8'         复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128  'c16'        复数,表示双 64 位浮点数(实数部分和虚数部分)

6、参考

bcolz 是一个高压缩率,读写效率高的python库

Welcome to bcolz’s documentation! — bcolz 1.2.0 documentation (blosc.org)

Library Reference — bcolz 1.2.0 documentation (blosc.org)

bcolz文档

读写 zip/hdf/rar/targz/bcolz/7z

Python进行数据分析学习笔记五:数据加载、存储与文件格式 

 类似资料: