首先,我刚刚开始使用Python,但我确实很努力地寻找适合我的东西。我要做的是一个简单的 Linux 文件系统,但说实话我什至不确定它是否可以用 python 实现。所以我在这里需要一些帮助。
我尝试创建一个类结构并命名元组(一次一个适合的元组),并且我认为类对我来说会更好。问题是我无法逐字节读取,因为我的类的大小是 888,而在 C 中是 44(我在那里使用了 sys.getsizeof()),通过下面的一些代码将更容易理解我想要实现的目标
对于这个结构
struct sb{
int inode_bitmap;
int data_bitmap[10];
};
我用过
#SUPER BLOCK
class sb(object):
__slots__ = ['inode_bitmap', 'data_bitmap'] #REDUCE RAM USAGE
def __init__(bruh, inode_bitmap, data_bitmap):
bruh.inode_bitmap = inode_bitmap
bruh.data_bitmap = [None] * 10 #DEFINITION OF ARRAY
在我读到它之前一切都很好
FILE * fin = fopen("simplefs.bin", "r");
struct inode slash;
fseek(fin, sizeof(struct sb), SEEK_SET);
fread(&slash,sizeof(slash),1,fin);
fin = open("simplefs.bin", "rb")
slash = inode
print("pos:", fin.tell())
contents = fin.read(sys.getsizeof(sb))
print(contents)
由于实际文件大小约为 4800,但当我阅读时,大小约为 318
我很清楚 python 不是 C,但我只是在做一些实验(如果可以实现的话)
最佳答案
您不能设计一个结构,然后尝试将其读/写到文件中并期望它是二进制相同的。如果您想解析任何二进制数据,您可以使用模块 struct
来将读取的数据解释为 int
、float
和 a十几种其他格式。您仍然必须手动编写格式。在您的具体情况下:
import struct
with ('datafile.dat') as fin :
raw_data = fin.read()
data = struct.unpack_from( '11I', raw_data ) # 11 integers
inode_bitmap = data[0]
data_bitmap = data[1:]
或者类似的东西......
关于python - 在Python中设计类似C的结构的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513426/