直接调用 read 函数是读取所有文件到内存中。
但是函数中可以加一个整数,表示从文件中读入多少字节文件。
如果文件过大,直接用 read 读感觉会撑爆内存。但是用 read(1024)读吧,又要读取多次。肯定要使用循环。
但是循环该如何写呢?例如下面的例子:
with open("D:/source.exe", 'rb') as f_in:
with open("D:/target.exe", 'wb') as f_out:
#使用 read(size)函数希望把 D:/source.txt 复制到 D:/target.exe
1
n2ex2 2017-11-14 17:01:43 +08:00 via Android
.seek()
|
2
Trim21 2017-11-14 17:02:39 +08:00
这个思路不行吗?楼主的疑问是从哪里来的..
with open('f1') as f_in: ....with open('f2') as f_out: ........for x in range(1, size_of_f_in, 1024): ............content = f_in.read(1024) .............append_to_file_out(content) |
3
Trim21 2017-11-14 17:07:51 +08:00 1
刚刚随手写的,size_of_file_in 随手写一个比 f_in 大的都可以,跑了下 md5 是一样的
with open('page.db.bak', 'rb') as f_in: with open('f2', 'wb') as f_out: for x in range(1, 1000000000, 100): content = f_in.read(100) f_out.write(content) |
4
cy97cool 2017-11-14 18:43:54 +08:00 via Android
直接死循环读就行 读到空字符串就 break
|
5
hjuj91 2017-11-14 19:06:47 +08:00
用 pipe redirect 不行么。。
|
6
NoAnyLove 2017-11-15 09:47:31 +08:00
readline 需要换行符界定一行,如果一行太长了,可以这么做:
from functools import partial with open('1.in', 'rb') as f_in, open('1.out', 'wb') as f_out: ....read_iter = iter(partial(f_in.read, 1024), b'') ....for block in read_iter: ........f_out.write(block) |