可能你会认为, 使用Python读取磁盘是一件复杂的任务, 需要调用较深的操作系统API。
目录
读取磁盘分区
写入磁盘分区
需要注意的是, Python似乎并没有读取磁盘方面的库, 但可以直接用以下的方法。
读取磁盘分区
# 打开C盘分区
disk = open(r'.C:', 'rb')
# 读取第一个扇区数据, 1扇区为512字节
print(disk.read(512))
# 读到的是PBR, 分区引导记录
读取结果如下:
b'xebRx90NTFS x00x02x08x00x00x00x00x00 x00x00xf8x00x00?x00xffx00x00x08x00x00x00x00x00x00x80x00 x80x006xae4x08x00x00x00x00x00x00x0cx00x00x00x00x00x02x00x00 x00x00x00x00x00xf6x00x00x00x01x00x00x00xc2Zx0cx00 xGx0cx00x00x00x00x00xfa3xc0x8exd0xbcx00|xfbhxc0x07x1fx1ehfx00xcbx88 x16x0ex00fx81>x03x00NTFSux15xb4AxbbxaaUxcdx13rx0cx81xfbUxaaux06xf7xc1x01x00ux03xe9xd2x00x1e x83xecx18hx1ax00xb4Hx8ax16x0ex00x8bxf4x16x1fxcdx13x9fx83xc4x18x9eXx1frxe1;x06x0bx00uxdbxa3x0fx00xc1.x0fx00x04x1eZ3xdbxb9x00 +xc8fxffx06x11x00x03x16x0fx00x8exc2xffx06x16x00xe8@x00+xc8wxefxb8x00xbbxcdx1af#xc0u- fx81xfbTCPAu$x81xf9x02x01rx1ex16hx07xbbx16hpx0ex16htx00fSfSfUx16x16x16hxb8x01fax0ex07xcdx1axe9jx01x90x90f`x1ex06fxa1x11 x00fx03x06x1cx00x1efhx00x00x00x00fPx06Shx01x00hx10x00xb4Bx8ax16x0ex00x16x1fx8bxf4xcdx13fY[ZfYfYx1fx0fx82x16x00fxffx06x11x00x03x16x0fx00 x8exc2xffx0ex16x00uxbcx07x1ffaxc3xa0xf8x01xe8x08x00xa0xfbx01xe8x02x00xebxfexb4x01x8bxf0xac注意: 一定要以管理员身份运行Python, 才有权限打开磁盘。
方法是: 在某Python IDE的图标上右键, 在菜单中选择"以管理员身份运行", 即可。期间若出现"允许某程序进行更改"的提示, 请选择"是"。
写入磁盘分区
注意: 请先备份重要数据。作者使用了一个VHD虚拟磁盘进行试验。
# 以读写模式打开磁盘分区 disk = open(r'\.g:', 'rb+') with open(r"d:分区PBR备份.txt","wb") as f: f.write(disk.read(512)) # --备份分区开第1个扇区数据-- disk.seek(0) # 将文件指针移回起始位置 # 写入, 这一步不会影响磁盘数据 disk.write(b'x00'*512) # 将数据真正写入磁盘 disk.close()会发现, 文件系统被成功破坏。此时, 分区G: 的文件虽然无法直接访问, 但原始数据仍然可以用以上的方式读取。
还原数据的代码:
disk = open(r'\.g:', 'rb+') with open(r"d:分区PBR备份.txt","rb") as f: disk.write(f.read())会发现, 分区G:恢复正常。
总之, 前面介绍了Python读写磁盘单个分区的技巧, 读取整个磁盘的方法作者正在探索中。
读写磁盘原始数据有广泛的用途, 例如分区数据备份, 数据恢复等。



