python显示数据长度_python 读取数据再写入,文件大小总会出现变差?

该博客探讨了在Python2.7.8中使用多线程进行大文件分块读取和写入时遇到的问题。作者尝试通过`file_by_block`函数定位文件指定位置并读取一定长度的数据,然后写入到另一个文件中,但发现无法完整写入。`process_pid`函数用于多线程处理,通过`RLock`实现同步,确保每个线程安全地处理文件的不同部分。然而,代码似乎在某些情况下无法正确地将所有数据写入目标文件。
摘要由CSDN通过智能技术生成

python 2.7.8

def file_by_block(file, begin, end):

with open(file, 'rb') as fp:

fp.seek(begin) #寻找文件中某个给定的位置

lenthofdata = end - begin #希望读取的大小

data = fp.read(lenthofdata)

with open('C:\\Users\\Administrator\\Desktop\\TEMP\\b.text', 'ab+') as fd:

fd.writelines(data)

无论用writelines还是write,用'a','ab','ab+',总是不能把data完整的写入到fd中。求高人指点,先谢!

多线程调用上面读取写入的部分:

def process_pid(pid, array, file, rlock):

'''

多个动作pid同时开动。

'''

FILE_SIZE = getFilesize(file)

while 1:

rlock.acquire()

begin = max(array)

end = array[pid] = (begin + BLOCKSIZE) if (begin + BLOCKSIZE) < FILE_SIZE else FILE_SIZE

rlock.release()

if begin == FILE_SIZE:

break

elif end < FILE_SIZE:

file_by_range(file, begin, end,pid)

elif end == FILE_SIZE:

file_by_range(file, begin, end,pid)

else:

break

def main():

file = "C:\\Users\\Administrator\\Desktop\\a.mkv"

FILE_SIZE = getFilesize(file)

rlock = RLock()

array = Array('l', WORKERS, lock=rlock)

threads = []

for i in range(WORKERS):

p = Process(target=process_pid(), args=[i, array, file, rlock])

threads.append(p)

for i in range(WORKERS):

threads[i].start()

for i in range(WORKERS):

threads[i].join()

print 'in main :', datetime.datetime.now().strftime("%Y-%d-%m %H:%M:%S")

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值