当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : python 3.3.0文件操作的一段代码,有疑问,请教
帖子发表于 : 2013-02-21 11:02 

注册: 2007-01-10 9:32
帖子: 1038
送出感谢: 4
接收感谢: 5
代码:
f = open("somefile.zip", "rb")
g = open("thecopy.zip", "wb")

while True:
    buf = f.read(1024)
    if len(buf) == 0:
         break
    g.write(buf)

f.close()
g.close()


上面的代码是拷贝1024个字节,我测试了一下,somefile.zip这个文件是3M,结果生成了3M的文件,也就是thecopy.zip.
按照程序,应该是1024bytes.

另外len(buf) == 0 这个不时很理解,测试它的长度,怎么就决定拷贝结算了呢?


_________________
ubuntu技巧 http://wiki.ubuntu.org.cn/index.php?tit ... 6.E5.8C.BA


页首
 用户资料  
 
2 楼 
 文章标题 : Re: python 3.3.0文件操作的一段代码,有疑问,请教
帖子发表于 : 2013-02-21 11:03 

注册: 2007-01-10 9:32
帖子: 1038
送出感谢: 4
接收感谢: 5
Files that hold photographs, videos, zip files, executable programs, etc. are called binary files: they’re not organized into lines, and cannot be opened with a normal text editor. Python works just as easily with binary files, but when we read from the file we’re going to get bytes back rather than a string. Here we’ll copy one binary file to another:

1 f = open("somefile.zip", "rb")
2 g = open("thecopy.zip", "wb")

4 while True:
5 buf = f.read(1024)
6 if len(buf) == 0:
7 break
8 g.write(buf)
9
10 f.close()
11 g.close()

There are a few new things here. In lines 1 and 2 we added a "b" to the mode to tell Python that the files are binary rather than text files. In line 5, we see read can take an argument which tells it how many bytes to attempt to read from the file. Here we chose to read and write up to 1024 bytes on each iteration of the loop. When we get back an empty buffer from our attempt to read, we know we can break out of the loop and close both the files.

If we set a breakpoint at line 6, (or print type(buf) there) we’ll see that the type of buf is bytes. We don’t do any detailed work with bytes objects in this textbook.


这个书上的原话。


_________________
ubuntu技巧 http://wiki.ubuntu.org.cn/index.php?tit ... 6.E5.8C.BA


页首
 用户资料  
 
3 楼 
 文章标题 : Re: python 3.3.0文件操作的一段代码,有疑问,请教
帖子发表于 : 2013-02-21 11:12 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
一次读1024字节,写1024字节,不是“拷贝1024个字节”。
就跟 dd if=xxx of=yyy bs=1024 一个道理。

文件读完了就读不出来东西了,所以就算要求读取1024字节,实际得到的还是0,然后可以据此判断文件已经读完。


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
4 楼 
 文章标题 : Re: python 3.3.0文件操作的一段代码,有疑问,请教
帖子发表于 : 2013-02-21 11:53 

注册: 2007-01-10 9:32
帖子: 1038
送出感谢: 4
接收感谢: 5
谢谢楼上,彻底明白。


_________________
ubuntu技巧 http://wiki.ubuntu.org.cn/index.php?tit ... 6.E5.8C.BA


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译