* 作者:煮酒品茶 tea
* 博客:http://www.zwhset.com http://cwtea.blog.51cto.com
* 目前在京峰教育担任python讲师
#0、文件函数open()
有时我们需要打开文件,或读或写入或追加文件。这时我们就需要用到open()函数。
需要注意的点:
> 写文件和追加文件的区别,如果要追加文件使用a模式,w模式会替换掉文件内容。
> 缓冲机制的问题。
> 关闭文件的问题,可采用with环境管理协议。
> 如果用w模式去打开一个文件,然后你是读不了的,这时候合理利用rw r+w这种方式
#1、函数原型
~~~
open(...)
#打开一个文件,得到一个文件对象
open(name[, mode[, buffering]]) -> file object
参数:
name:文件名,接收字符串类型,注意windows与类unix的 **\\**问题,windows可用r来抑制**\\**的转义
mode:打开模式,常见的有:
w : 写入模式 注意会覆盖文件内容,如果需要追加则使用 a 模式
r : 只读模式
a : 追加模式
b : 二进制模式 常见的图片、视频、word等文件
+ : 多种存在
buffering : 是否缓冲,注意这是python级的,内核级也有一个缓冲机制。
0:不缓冲
1: 缓冲
#open()函数使用file()函数对象,上面的具体说明可以使用file.__doc__来查看file的说明。基本上也就是我们看到的上面的一些东西。
Open a file using the file() type, returns a file object. This is the
preferred way to open a file. See file.__doc__ for further information.
~~~
#2、样例
##2.1、可使用with环境管理协议
~~~
with open('a.txt') as f:
pass
~~~
##2.2、exp
文件初始内容:
~~~
# cat t1.txt
nihao,I'm zwhset
I love you
~~~
读文件:
> open的读文件方法一共有三个,read() readline() readlines(),这三个方法都会保留换行符。
* read()方法针对字符,可用size来限定读取个数
* readline()方法针对行,可用size来聚宝读取行内字符的个数
* readlines() 返回列表
~~~
read(...)原型
#返回给定size的内容,size是可选的
read([size]) -> read at most size bytes, returned as a string.
#如果给定一个size参数则返回size的大小,在非阻塞模式下给的size过大会变取所有直到EOF
#如果size未给则默认读取所有,直接EOF
~~~
~~~
readline(...)原型
#读取文件下一行,返回一个字符串
readline([size]) -> next line from the file, as a string.
#此方法针对的字符串,也就是说你给定size返回整个内容的size个数
#此方法是一个生成器对象
#此方法size过大则全读完
注意:此方法针对行,如果行内未读完一直生成下去,也就是说如果size给定大于一行内的字符串个数也只会返回此行的个数
~~~
~~~
readlines(...)原型
#返回一个列表
readlines([size]) -> list of strings, each a line from the file.
#重复调用readline方法,如果给定size,则这个size是给定readline(size),类我们的列表解析
注意:这个方法好像没什么用。
~~~
**READ方法**
~~~
In [16]: f = open('t1.txt','r') # 打读模式打开个文件对象
In [17]: f.read() # 一次性全读完,返回字符串对象
Out[17]: "nihao,I'm zwhset\nI love you\n"
In [19]: f = open('t1.txt','r')
~~~
~~~
In [42]: f = open('/etc/passwd','r')
In [43]: f.read(100) #读取100个字符
Out[43]: 'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nol'
In [44]: len(f.read(100)) # 测试大小
Out[44]: 100
~~~
**READLINE方法**
~~~
In [20]: f.readline() # 生成器方法一次只返回一个结果
Out[20]: "nihao,I'm zwhset\n"
In [21]: f.readline()
Out[21]: 'I love you\n'
In [22]: f.readline() # 生成器元值则返回空对象
Out[22]: ''
~~~
**READLINES方法**
~~~
In [45]: f = open('/etc/passwd','r')
In [46]: f.readline(10) # 读取这行10个字符
Out[46]: 'root:x:0:0'
In [47]: f.readline(10) # 继续读取这一行的10个字符
Out[47]: ':root:/roo'
In [48]: f.readline(10)
Out[48]: 't:/bin/bas'
In [49]: f.readline(10000) # size过大,读取一行余下的字符
Out[49]: 'h\n'
In [50]: f.readline(10000) # size过大,读取一行所有的字符
Out[50]: 'bin:x:1:1:bin:/bin:/sbin/nologin\n'
~~~
~~~
In [24]: f = open('t1.txt','r')
In [25]: f.readlines() # 以行为元素,得到一个列表,列表的元素为字符串。
Out[25]: ["nihao,I'm zwhset\n", 'I love you\n']
In [67]: f = open('/etc/passwd','r')
In [68]: f.readlines(2)[:3] #size为2,并只取分片取3个元素。好像不起啥作用?
Out[68]:
['root:x:0:0:root:/root:/bin/bash\n',
'bin:x:1:1:bin:/bin:/sbin/nologin\n',
'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n']
~~~
写文件:
~~~
In [27]: f = open('t1.txt','w')
In [28]: f.write('woyehao')
In [29]: f.flush()
In [30]: f = open('t1.txt','w')
In [32]: list = ['ni','wo','ta']
In [33]: f.write
f.write f.writelines
In [33]: f.writelines(list)
In [34]: f.flush()
~~~
煮酒品茶:未完待续
- python核心
- python27编译安装
- 原处修改以及拷贝
- loop
- 内置的变量
- 内置类型
- python内置方法
- 内置方法列表
- 求绝对值-abs
- 求商取余-divmod
- 交换输入-input
- [未完]文件打开函数-open
- staticmethod
- 判断迭代对象真假all
- 判断迭代对象真假any
- 枚举对象enumerate
- 整数转换类型int
- ascii码转换ord-chr-unichr
- 类型转换str
- python执行字符串表达式eval
- 类型判断isinstance
- 数学计算pow
- 数学计算和sum
- 不可变集合frozenset
- zip
- 比较cmp
- basestring类型判断
- 反转序列迭代器resversed
- python模块
- glob
- sys.argvgetopt-argparse
- os
- sys
- requests
- random
- time
- date
- zlib-gzip-bz2-zipfile-tarfile
- ftp
- paramiko
- pexpect
- 数据库模块
- redis
- mysql
- mongodb
- __builtin__
- 学生PYTHON分享
- 学生运维分享