如何在文件中存储和写入/加载任意数量的位?

时间:2015-04-24 14:35:35

标签: python bits

我想写一个哈希函数,从3个整数a,b,c返回一个哈希值。我希望能够选择每个整数编码的位数并将它们连接起来。例如:

COPY t (c1, c2, c3 AS CURRENT_LOAD_SOURCE()) 
FROM '/home/load_file_1' ON exampledb_node02, '/home/load_file_2' ON exampledb_node03 
DELIMITER ',';

应该给出

#!/bin/bash
for INPUT_FILE in /path/to/file*.dat; do
vsql -c "copy test_file_name_insert
(
input_file_name as '$INPUT_FILE',
id,
name
)
from '/home/test_input_file.txt'
delimiter '|' ;"
done

即。 20位。

给定a,b和c作为整数(60,113和5)以及每个允许的位数(8,8和4),如何获取散列,将其存储在总数的python对象中大小(20位),并将其写入/加载到文件?

2 个答案:

答案 0 :(得分:0)

这是一个将任意位数写入文件类对象的类。完成后请致电flush

class bitwriter():
    def __init__(self, f):
        self.f = f
        self.bits = 0
        self.count = 0
    def write(self, value, bitcount):
        mask = (1 << bitcount) - 1
        self.bits = (self.bits << bitcount) | (value & mask)
        self.count += bitcount
        while self.count >= 8:
            byte = self.bits >> (self.count - 8)
            self.f.write(byte, 1)
            self.count -= 8
            self.bits &= (1 << self.count ) - 1
    def flush(self):
        if self.count != 0:
            byte = self.bits << (8 - count)
            self.f.write(byte, 1)
        self.bits = self.count = 0
        self.f.flush()

答案 1 :(得分:0)

我认为这可以满足您的需求。它使用我的另一个答案中引用的bitio模块来写入/读取文件中的位。

操作系统通常要求文件大小为8位的倍数,因此最终会创建一个24位(3字节)文件来存储单个20位值。当然,如果你写了几个,一个紧接着另一个,并且直到最后一个之后才调用 label.backgroundColor = [UIColor redColor]; ,那么每20位值的这16.7%的开销就不会发生。

flush()