- 论坛徽章:
- 2
|
本帖最后由 lolizeppelin 于 2015-01-03 19:46 编辑
read文件定位需要修改的开始位置和结束位置
nmpa映射文件需要修改的部分
改完写回去
以前写过一个
f = open(full_file_path,'r+')
count_len = 0
start_len = 0
end_len = 0
for i in range(max_serach_num):
line = f.readline()
count_len += len(line)
#获取创建mysql数据库的起始位置
if line[0:28] == "-- Current Database: `mysql`":
print 'fine mysql len is ' + str(count_len)
start_len = count_len
#获取创建mysql数据库的结束位置
if line[0:40] == "-- Dumping routines for database 'mysql'":
end_len = count_len
break
if i == max_serach_num - 1:
return_value['code'] = 1
return_value['reason'] = 'find mysql databse start or end line fail over max'
return return_value
if not end_len > start_len:
return_value['code'] = 1
return_value['reason'] = 'find mysql databse start or end line fail'
return return_value
#偏移量必须是pagesize的整数倍,补全下偏移量
completion_pagesize = start_len % page_size
print 'cp size is %d ' % completion_pagesize
start_len = start_len - completion_pagesize
mmap_len = end_len - start_len
#映射数据库文件 创建mysql的文件断
map = mmap.mmap(f.fileno(), length=mmap_len, access = mmap.ACCESS_WRITE, offset=start_len)
mark_start = 0
mark_end = 0
for i in range(max_mysqldb_len):
mark = map.tell()
line = map.readline()
print line
if line[0:28] == "-- Current Database: `mysql`":
#创建位置标记
mark_start = mark
if line[0:40] == "-- Dumping routines for database 'mysql'":
#结束位置标记
mark_end = map.tell()
break
if i == max_mysqldb_len - 1 :
return_value['code'] = 1
return_value['reason'] = 'mysql database too large!'
#头3字节转为注释符号
map[mark_start:mark_start+3] = '/*\n'
#用@填充
for k in range(mark_start+3, mark_end):
map[k] = '@'
#尾3字节添加注释符号
map[-3:mark_end] = '*/\n'
map.flush()
f.close()
|
|