python入门系列9―——文件处理

来源:互联网 发布:aphex twin 知乎 编辑:程序博客网 时间:2024/06/05 14:25

欢迎前往我的个人博客


python 提供了file对象来对文件操作。


打开文件:open函数,此函数会创建一个file对象,然后通过相关函数进行调用

格式:

file object = open(file_name [, access_mode][, buffering])
各参数如下:
file_name:包含路径的文件名
access_mode:打开文件的模式,包括只读,写入,追加等。默认文件访问模式为只读(r)。
buffering:为0表示不会有寄存。为1表示访问文件时会寄存行。如果设为大于1的整数,表示寄存区的缓冲大小。负值为默认。

打开模式包含:

r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。


我们可以来个例子看下:

首先创建一个hello.txt,内容如下:

hellopython1+1=2www.baidu.com

然后同目录创建一个python文件。具体代码如下:

f = open("hello.txt")print "文件名: ", f.nameprint "是否已关闭 : ", f.closedprint "打开模式 : ", f.mode
结果:

文件名:  hello.txt是否已关闭 :  False访问模式 :  r


有打开文件就有关闭文件,这个时候我们就要使用close()函数。

f.close()



当我们需要读取文件的内容的时候,我们就要用到read()函数:

f = open("hello.txt")print f.read()
如果想读取指定长度,可以使用read(长度)
f = open("hello.txt")print f.read(8)

如果想写入内容,就要用到write()函数

格式:

f.write(string)
注意,要想写入,就需要打开模式设置成可以写入的才行,因为默认是只读所以这个时候调用write会报错

f = open("hello.txt")f.write( "replace python");
提示:

Traceback (most recent call last):
  File "D:\Python27\Mytest\test.py", line 2, in <module>
    f.write( "replace python");
IOError: File not open for writing

所以改成

f = open("hello.txt","w+")f.write( "replace python");f.close()
如果需要写入多次只需要多次调用write函数即可,多行的话需要字符串后跟上转义符"\n",表示换行

f.write( "replace python1\n");


之前我们使用过read(长度),如果这时候再调用read()会是什么效果?

我们先把hello.txt改成:

replace python1replace python2replace python3replace python4
代码如下:

f = open("hello.txt")print f.read(10)print ""print f.read()f.close()
结果
replace python1replace python2replace python3replace python4
第二个read是接着之前的内容读取的,如果想输出全部内容,就需要重新定位。

查看当前位置可以使用tell() 
移动当前位置可以使用seek(offset [,from]),Offset变量表示要移动的字节数,From变量指定开始移动字节的参考位置

例如:

f = open("hello.txt")print f.read(10)print "当前位置",f.tell()f.seek(0,0)  #当前位置设置成开头print f.read()f.close()
结果:

replace py当前位置 10replace python1replace python2replace python3replace python4


文件的删除和重命名

这2个操作,需要带入os模块

重命名使用rename(),该函数需要两个参数,当前的文件名和新文件名。
删除使用remove(),该方法需要一个参数,文件名。

例如:

import osos.rename( "test1.txt", "test2.txt" )
import osos.remove("test2.txt")

我们能对文件操作,那么使用python同样可以对文件夹操作,os模块提供了函数

例如:

import os# 创建目录testdiros.mkdir("testdir")# 进入testdir目录os.chdir("testdir")# 查看testdir路径print os.getcwd()
输出:

D:\Python27\Mytest\testdir
那么我们可以根据这个路径删除目录:

import osos.rmdir("D:/Python27\Mytest/testdir")
注意斜杠和反斜杠哦