直接调用 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 ![]() 刚刚随手写的,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) |