python进阶学习笔记(一)
2013-05-22 00:22 虫师 阅读( ... ) 评论( ... ) 编辑 收藏同样是《python基础教程(第二版)》的内容,只是后面内容学起来,相比前面会比较有趣,也更加实用,所以,将“基础”改为“进阶”。
python 电子书分享地址: http://yunpan.cn/Q2U87uGrNiTA3
本节讲文件的操作
-------------------------------
打开文件
open 函数用来打开文件,语法如下:
open(name[, mode[,buffering]])
open 函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。假设我要打开我硬盘( I : /python/test.txt ) 文件,可以用下面方法:
>>> f = open(r
'
i:\python\test.txt
'
)
open 函数中模式参数的常用值
基本文件方法
打开文件是第一步,下面就需要对文件进行读或写,可以 write 和 read 方法进行读或写。
#
写入文件内容
>>> f = open(
'
test.txt
'
,
'
w
'
)
>>> f.write(
'
hello,
'
)
>>> f.write(
'
world!
'
)
>>>
f.close()
#
读取文件内容
>>> f = open(
'
test.txt
'
,
'
r
'
)
>>> f.read(4)
#
读取前4个字符
'
hell
'
>>> f.read()
#
读取剩余的所有字符
'
o,world!
'
关闭文件
应该牢记使用 close 方法关闭文件。尽管一个文件对象在退出程序后会自动关闭,但关闭文件是没什么害处的,可以避免在某些操作系统或设置中进行无用的修改,这样做也会避免用完系统中打开文件的配额。
使用基本文件方法
假如test.txt 文件包含如下内容:
-----------------------------
Welcome to this file
There is nothing here except
This stupid haiku
-----------------------------
下面是基本读文件的方法:
#
read(n) 指定参数
>>> f = open(r
'
I:\python\test.txt
'
)
>>> f.read(7
)
'
Welcome
'
>>> f.read(4
)
'
to
'
>>>
f.close()
#
read() 不指定参数
>>> f = open(r
'
I:\python\test.txt
'
)
>>>
print
f.read()
Welcome to this file
There
is
nothing here
except
This stupid haiku
>>>
f.close()
#
readline()
>>> f = open(r
'
I:\python\test.txt
'
)
>>>
for
i
in
range(3
):
print
str(i) +
'
:
'
+
f.readline()
0:Welcome to this file
1:There
is
nothing here
except
2
:This stupid haiku
>>>
f.close()
#
readlines()
>>>
import
pprint
>>> pprint.pprint(open(r
'
I:\python\test.txt
'
).readlines())
[
'
Welcome to this file\n
'
,
'
There is nothing here except\n
'
,
'
This stupid haiku
'
]
readline 返回一行的字符串 , readlines 返回包含文件所有内容的字符串列表 , 每个元素是一行的字符串 。
pprint 模块的 pprint 方法将内容分成每个小项单行显示。
下面是写文件的基本方法:
>>> f = open(r
'
I:\python\test.txt
'
,
'
w
'
)
#
默认是读文件,可以不加‘r’,写文件一定要加’w’
>>> f.write(
'
this\nis no \nhaiku
'
)
>>> f.close()
>>> f = open(r
'
I:\python\test.txt
'
)
>>> lines =
f.readlines()
>>> lines[1] =
"
isn't a\n
"
>>> f = open(r
'
I:\python\test.txt
'
,
'
w
'
)
>>>
f.writelines(lines)
>>> f.close()
对文件内容进行迭代
1、接字节处理
最常见的对文件内容进行迭代的方法是 while 循环中使用 read 方法。例如,对每个字符进行循环,可以用下面方法实现:
f =
open(filename)
char
= f.read(1
)
while
char:
process(char)
char
= f.read(1
)
f.close()
read 方法返回的字符串会包含一个字符,直到文件末尾, read 返回一个空的字符串, char 将变为假。
可以看到,char = f.read(1) 被重复地使用,代码重复通过被认为是一件坏事,看看下面的方法:
f =
open(filename)
while
True:
char
= f.read(1
)
if
not
char:
break
process(char)
f.close()
这里 break 语句被频繁的使用(这样会让代码比较难懂),尽管如此,但它仍然要比前面的方法好。
2、读取所有内容
如果文件不是很大,那么可以使用不带参数的 read 方法一次读取整个文件,或者使用 readlines 方法。
#
用read迭代每个字符
f =
open(filename)
for
char
in
f.read():
process(char)
f.close()
#
用readlines迭代行:
f =
open(filename)
for
line
in
f.readlines():
process(line)
f.close()
3、用 fileinput 来进行迭代
fileinput 模块包含了打开文件的函数,,只需要传一个文件名给它
import
fileinput
for
line
in
fileinput.input(filename):
process(line)
4、文件迭代器
好吧!这是 python2.2 之后才有的方法,如果它一开始就有,上面的方法也许就不存在了。文件对象是可以迭代的,这就意味着可以直接在 for 循环中对他们进行迭代
f =
open(filename)
for
line
in
f:
process(line)
f.close()
再来看下面例子:
>>> f = open(r
'
I:\python\test.txt
'
,
'
w
'
)
>>> f.write(
'
First line\n
'
)
>>> f.write(
'
Second line\n
'
)
>>> f.write(
'
Third line\n
'
)
>>>
f.close()
>>> lines = list(open(r
'
I:\python\test.txt
'
))
>>>
lines
[
'
First line\n
'
,
'
Second line\n
'
,
'
Third line\n
'
]
>>> first,second,third = open(r
'
I:\python\test.txt
'
)
>>>
first
'
First line\n
'
>>>
second
'
Second line\n
'
>>>
third
'
Third line\n
'
在这个例子中:
- 使用序列来对一个打开的文件进行解包操作,把每行都放入一个单独的变理中,这么做是很有实用性的,因为一般不知道文件中有多少行,但它演示的文件的“迭代性”。
- 在写文件后一定要关闭文件,这样才能确保数据被更新到硬盘。

