python学习笔记之十:文件和素材
这里将介绍函数和对象--文件和流,让你在程序调用期间存储数据,并且可以处理来自其他程序的数据。
一. 打开文件
1.1 open函数
open函数用来打开文件,语法如下:open(name,[.mode[.buffer]])
它有唯一一个强制参数,就是文件名,然后返回一个文件对象。参数-模式和缓冲都是可选的。
使用范例:(如果文件不存在,就会报错)
>>> f = open('c:\\text\\test.txt') #windows下
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
f = open('c:\text\test.txt')
IOError: [Errno 22] invalid mode ('r') or filename: 'c:\text\test.txt'
(1)模式
如果要向文件中写入内容,则必须提供一个模式参数来显式声明。读取文件对象时指定或不指定读模式是一样的效果。
下面是模式常用值:
值 描述
‘r’ 读模式
'w' 写模式
'a' 追加模式
'b' 二进制模式(可添加到其他模式中):改变处理文件的方法,如二进制文件 ‘rb’
'+' 读/写模式(可添加到其他模式中):‘r+’表示读写
(2)缓冲
open函数的第三个参数控制着文件的缓冲。
如果参数是0,I/O就是无缓冲的,所有读写操作都是直接针对硬盘的;
如果参数是1,I/O就是有缓冲的,用内存代替硬盘,让程序更快,只有使用flush或者close时才会更新硬盘上的数据;
如果参数大于1,参数的数字代表缓冲区的大小;
如果参数是-1,代表使用默认的缓冲区大小;
二. 基本文件方法
2.1 读和写:假设test.txt文本中存了“hello,world!”
(1)读:f.read(字符个数),可以指定字符个数,不指定时,会读取之前读取过的全部剩余部分;
>>> f = open('D:\\python\\test.txt')
>>> f.read(3)
'hel'
>>> f.read()
'lo,world!'
注意:在读取文件时,可以省略模式说明,因为‘r’是默认的。
(2)写:f.write(string),新写入的数据会覆盖掉原有的数据,在关闭文件前,后续的write操作内容会被追加到文件已存在部分的后面;
>>> f = open('D:\\python\\test.txt','r+')
>>> f.write(' bangbangjiang')
>>> f.write('hao')
>>> f.read()
' bangbangjianghao'
>>> f.read()
2.2 管道输出
在UNIX的shell中,使用管道可以在一个命令后面续写其他的多个命令。
例如: $ cat somefile.txt | python somesctript.py | sort
第一个命令是把somefile.txt中的内容写到标准输出;
第二个命令运行了一个python脚本,脚本内容应该是从标准输入读,把结果写入到标准输出;
第三个命令是从标准输入读取所有的文本,按字母排序,然后把结果写入标准输出;
管道符合“|”就是将一个命令的标准输出和下一个命令的标准输入连在一起。
2.3 读写行
(1) file.readline():读取单独的一行,从当前位置开始直到一个换行符的出现(不同平台上的换行符查看os.linesep);如果含有参数(非负的整数),它表示读取的字符最大值。
>>> f = open('D:\\python\\test.txt')
>>> for i in range(3):
print str(i) + ':' + f.readline()
0:hello,world!
1:welcome to here!
2:there is nothing!
>>> f.close()
注意:上面的例子可以看出,换行符也会被读出!!读出的句子之间都有一个空行。
(2) file.readlines():读取一个文件的所有行并将其作为列表返回;
>>> f = open('D:\\python\\test.txt')
>>> f.readlines()
['hello,world!\n', 'welcome to here!\n', 'there is nothing!']
(3) file.writelines():参数是一个字符串列表,它会把所有的字符串写入文件。注意,程序不会增加新行,需要自己添加。
>>> f = open('D:\\python\\test.txt')
>>> lines = f.readlines()
>>> lines
['I \n', 'am \n', 'a writer!']
>>> f.close()
>>> f = open('D:\\python\\test.txt','w')
>>> lines[1] = 'am not\n'
>>> f.writelines(lines)
>>> f.close()
#文本内容如下:
I
am not
a writer!
2.4 关闭文件
通常一个文件对象在退出程序后会自动关闭,但是对于写入过的文件总是应该关闭,因为python可能会缓存写入的数据,如果程序因为某些原因崩溃了,那么数据根本不会被写入文件,为了安全起见,要在使用完文件后关闭。
如果想确保文件被关闭,那么应该使用try/finally语句,并且在finally子句中调用close方法。
f = open('D:\\python\\test.txt','w')
try:
f.write("sss")
finally:
f.close()
事实上,还有一个语句专门是为这种情况设计的:with
with open('D:\\python\\test.txt','w') as f:
f.write("aaaa")
文件在语句结束之后会被自动关闭,即便是由于异常引起的结束也是这样。
三. 对文件内容进行迭代
对文件内容进行迭代以及重复执行一些操作,是最常见的文件操作之一。
假设do_something.py中有一个函数叫do_something(),运行之:
def do_something(string):
print "hello, " , string
3.1 按字节处理
最常见的对文件内容进行迭代的方法是在while循环中使用read方法。
>>> f.open('do_something.py')
>>> while True:
char = f.read(1)
if not char:break
do_something(char)
hello, def do_something(string):
hello, print "hello, " , string
hello,
>>> f.close()
3.2 按行操作
当处理文件时,经常对文件的行进行迭代。
>>> f.open('do_something.py')
>>> while True:
line = f.readline()
if not line:break
do_something(line)
hello, def do_something(string):
hello, print "hello, " , string
hello,
>>> f.close()
3.3 读取所有内容
如果文件不大,可以用read()方法一次读取整个文件,但如果文件比较大,使用readlines方法比较好。
>>> f.open('do_something.py')
>>> for char in f.read():
do_something(char)
hello, def do_something(string):
hello, print "hello, " , string
hello,
>>> f.close()
或者:
>>> f.open('do_something.py')
>>> for line in f.readlines():
do_something(line)
hello, def do_something(string):
hello, print "hello, " , string
hello,
>>> f.close()
3.4 使用fileinput实现懒惰行迭代
在需要对一个非常大的文件进行行迭代时,readlines所占用的内存会非常多。用for循环可以使用一个名为懒惰行迭代的方法,说它懒惰是因为它只是读取实际需要的文件部分。
>>> import fileinput
>>> for line in fileinput.input('D:\\python\\do_something.py'):
do_something(line) hello, def do_something(string): hello, print "hello, " , string hello,
3.5 文件迭代器
从2.2版本的python开始,文件对象是可迭代的!这意味着可以直接在for循环中使用它们,从而对它们进行迭代。
f = open('D:\\python\\do_something.py')
>>> for line in f:
do_something(line)
hello, def do_something(string):
hello, print "hello, " , string
hello,
>>> f.close()
注意:sys.stdin是可迭代的,就是其他的文件对象:
>>> import sys
>>> for line in sys.stdin:
do_something(line)
python学习笔记之十:文件和素材的更多相关文章
- Python学习笔记(十四)
Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...
- Python学习笔记(十)
Python学习笔记(十): 装饰器的应用 列表生成式 生成器 迭代器 模块:time,random 1. 装饰器的应用-登陆练习 login_status = False # 定义登陆状态 def ...
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
- Python学习笔记(十四):模块高级
以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-23 21:30 学习笔记 1,包导入是把计算机上的 ...
- Python学习笔记(十五):类基础
以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-24 23:59 学习笔记 1,Python中的大多 ...
- (C/C++学习笔记) 二十. 文件和流
二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...
- Python 学习笔记(十二)Python文件和迭代(二)
迭代 基本含义 迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值. 在计算科学中,迭代 ...
- Python 学习笔记(十二)Python文件和迭代(一)
文件 文件和文件夹 文件:文本文件.二进制文件 文件夹:(windows) G:\pythonWorkspace\python\study (linux/mac) /home/workspace/py ...
- python学习笔记(十六)之文件
打开文件用open函数 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=Tru ...
随机推荐
- Oracle SQL语句执行过程
前言 QQ群讨论的时候有人遇到这样的问题:where子句中无法访问Oracle自定义的字段别名.这篇 博客就是就这一问题做一个探讨,并发散下思维,谈谈SQL语句的执行顺序问题. 问题呈现 直接给出SQ ...
- mysql5.6 主从配置
参考网址:http://www.cnblogs.com/zhoujie/p/mysql1.html http://kerry.blog.51cto.com/172631/277414/ 1.配置主库: ...
- Lucene.Net 2.3.1开发介绍——附录一、如何下载Lucene.Net的各种版本
原文:Lucene.Net 2.3.1开发介绍--附录一.如何下载Lucene.Net的各种版本 首先,你需要一个svn客户端.TortoiseSVN非常好用,可以从官方网站下载.下载地址:http: ...
- 【老鸟学算法】包含 min函数的栈设计——java实现
要求: 1. 定义栈的数据结构,要求添加一个 min函数,能够得到栈的最小元素. 2. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 这是考验“栈”数据结构设计.众所周知,栈 ...
- Effective C++ 24,25
24.在函数重载和设定參数缺省值间要谨慎选择. 获得一种类型的数据的最小值或最大值,对于c中,一般使用在<linits.h>中定义的各种宏如INT_MIN 来进行表示,可是这样无法进行泛型 ...
- python爬虫抓站的一些技巧总结
使用python爬虫抓站的一些技巧总结:进阶篇 一.gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45 ...
- GCC编译优化指南【作者:金步国】
GCC编译优化指南[作者:金步国] GCC编译优化指南 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分 ...
- 利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)
利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)作者:Tuuzed(土仔) 发表于:2008年3月3日23:12:38 版权声明:可以任意转载,转载时请 ...
- 在WPF的WebBrowser控件中抑制脚本错误
原文:在WPF的WebBrowser控件中抑制脚本错误 今天用WPF的WebBrowser控件的时候,发现其竟然没有ScriptErrorsSuppressed属性,导致其到处乱弹脚本错误的对话框,在 ...
- iOS:点击button卡死
场景: 在tableView的Cell中有一个button,我须要点击这个button然后使得其视图控制器上的一个视图改变frame,可是我点击这个button后,导致卡死,也不崩溃.所有事 ...