近期,由于业务需要,需要培养几个同事来做数据恢复工具开发。经过多方考虑,最终选择Python语言,一是库多,二学习难度低。本人也是第一次接触Python,和同事一起学习,把学习过程记录,共同分享。
所需Python内容
Python3 环境搭建
Python3 基础语法
Python3 基本数据类型
Python3 解释器
Python3 注释
Python3 运算符
Python3 数字(Number)
Python3 字符串
Python3 列表
Python3 条件控制
Python3 循环语句
Python3 迭代器与生成器
RAID0 示意图
数据被分成固定大小的块,本例使用64kb(128扇区)
按顺序写入到N块盘中。
RAID0示意图 | ||||
DISK0 | DISK1 | DISK2 | DISK3 | |
block0 | 0 | 1 | 2 | 3 |
block1 | 4 | 5 | 6 | 7 |
block2 | 8 | 9 | 10 | 11 |
block3 | 12 | 13 | 14 | 15 |
block4 | 16 | 17 | 18 | 19 |
block5 | 20 | 21 | 22 | 23 |
block6 | 24 | 25 | 26 | 27 |
… | … | … | … | … |
RAID0 数据重组工具源码
重组算法:
依次读取块大小(64k)的数据到缓存,然后顺序写到输出文件。
# RAID0 重组工具源码
import os
print("磁盘阵列重组工具")
# 磁盘数量
diskcnt = input("输入磁盘数量:")
# 文件对象列表
disks = []
# RAID 0 块大小 128 扇区,每次读一个块
bufsize = 512 * 128
# 文件大小
maxsize = 0
# 磁盘读缓存列表
buflist=[]
# 打开文件
for disknum in range(0,int(diskcnt)):
while True:
tip = ("输入%d号磁盘路径:") % disknum
diskpath = input(tip)
if(os.path.exists(diskpath)):
try:
disk = open(diskpath, 'rb')
except IOError:
print('Error:没有找到 文件或打开文件失败')
continue
disks.append(disk)
disksize = os.path.getsize(diskpath)
if(disksize > maxsize):
maxsize = disksize
break;
else:
print("输入错误,重新输入")
while(True):
outpath = input("输出文件路径:")
try:
outfile = open(outpath,'wb')
except IOError:
print('Error:没有找到 文件或读取文件失败')
continue
else:
break
# 循环读取文件
# 此处使用缓存,今后可用配置文件控制读写
for block in range(0,maxsize//bufsize):
# 清除缓存列表
buflist.clear()
#读取放到缓存
for disk in disks:
bufread = disk.read(bufsize)
buflist.append(bufread)
#缓存写入文件
for i in range(0,len(buflist)):
k = (disknum-block)
outfile.write(buflist[i])
print("完成")