Python 中 open 函数的 read(size)方法如何循环

2017-11-14 16:56:18 +08:00
 onice

直接调用 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
4321 次点击
所在节点    Python
6 条回复
n2ex2
2017-11-14 17:01:43 +08:00
.seek()
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)
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)
cy97cool
2017-11-14 18:43:54 +08:00
直接死循环读就行 读到空字符串就 break
hjuj91
2017-11-14 19:06:47 +08:00
用 pipe redirect 不行么。。
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)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX