Python 提供了必要的函数和方法进行默认情况下的文件基本操作.你可以用 file 对象做大部分的文件操作.
一,打开和关闭文件
例 1
(1)创建名为 test1.txt 的文件,内容为
This is a test file.
(2)在同一目录下新建 file1.py 文件,内容如下
运行结果:
file = open("test1.txt", "wb")
print "File name: ", file.name
print "Access mode: ", file.mode
print "Closed or not? ", file.closed
file.close()
print "Closed or not? ", file.closed
说明:
File name: test1.txt
Access mode: wb
Closed or not? False
Closed or not? True
(一)open 函数
你必须先用 Python 内置的 open() 函数打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写.
语法:
file object = open(file_name [, access_mode][, buffering])
各个参数的细节如下:
(1)file_name:file_name 变量是一个包含了你要访问的文件名称的字符串值.
(2)access_mode:access_mode 决定了打开文件的模式:只读,写入,追加等.所有可取值见如下的完全列表.这个参数是非强制的,默认文件访问模式为只读 (r).下表是这些模式的总结.
模式 描述
r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式.
rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式.
r+ 打开一个文件用于读写.文件指针将会放在文件的开头.
rb+ 以二进制格式打开一个文件用于读写.文件指针将会放在文件的开头.
w 打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件.
wb 以二进制格式打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件.
w+ 打开一个文件用于读写.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件.
wb+ 以二进制格式打开一个文件用于读写.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件.
a 打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.也就是说,新的内容将会被写入到已有内容之后.如果该文件不存在,创建新文件进行写入.
ab 以二进制格式打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.也就是说,新的内容将会被写入到已有内容之后.如果该文件不存在,创建新文件进行写入.
a+ 打开一个文件用于读写.如果该文件已存在,文件指针将会放在文件的结尾.文件打开时会是追加模式.如果该文件不存在,创建新文件用于读写.
ab+ 以二进制格式打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾.如果该文件不存在,创建新文件用于读写.
(3)buffering: 是一个可选的参数,用来表示缓冲区的策略选择.设置为 0 时,表示不使用缓冲区,直接读写,仅在二进制模式下有效.设置为 1 时,表示在文本模式下使用行缓冲区方式.设置为大于 1 时,表示缓冲区的设置大小.如果参数 buffering 没有给出,使用默认时,会采用下面策略来选择:
① 对于二进制文件模式时,采用固定块内存缓冲区方式,内存块的大小根据系统设备的分配的磁盘块来决定,如果获取系统磁盘块的大小失败,就使用内部常量 io.DEFAULT_BUFFER_SIZE 定义的大小.一般的操作系统上,块的大小是 4096 或者 8192 字节大小.
② 对于交互的文本文件(采用 isatty() 判断为 True)时,采用一行缓冲区的方式.其它文本文件使用跟二进制一样的方式.
(二)File 对象的属性
一个文件被打开后,你有一个 file 对象,你可以得到有关该文件的各种信息.
以下是和 file 对象相关的所有属性的列表:
属性 描述
file.closed 返回 true 如果文件已被关闭,否则返回 false.
file.mode 返回被打开文件的访问模式.
file.name 返回文件的名称.
(三)close() 方法
close() 方法方法关闭打开的文件.关闭的文件无法读取或写入更多东西.文件已被关闭之后任何操作都会引发 ValueError.但是调用 close() 多次是可以的.
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件.
用 close()方法关闭文件是一个很好的习惯.
二,读取文件内容
例 2
运行结果:
file = open("test1.txt", "r+")
content = file.read(10)
print content
file.close()
This is a
read() 方法
read()方法从一个打开的文件中读取一个字符串.需要重点注意的是,Python 字符串可以是二进制数据,而不仅仅是文字.
语法:
fileObject.read([count]);
在这里,被传递的参数是要从已打开文件中读取的字节计数.该方法从文件的开头开始读入,如果没有传入 count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾.
三,写入文件
例 3
运行结果:
file = open("test2.txt", "wb")
file.write( "I like study Python.");
file.close()
生成test2.txt,并向其写入
I like study Python.
说明:
write() 方法
write() 方法可将任何字符串写入一个打开的文件.需要重点注意的是,Python 字符串可以是二进制数据,而不仅仅是文字.
write() 方法不会在字符串的结尾添加换行符 ('\n'):
语法:
fileObject.write(string);
在这里,被传递的参数是要写入到已打开文件的内容.
四,文件定位
例 4
运行结果:
file = open("test1.txt", "r+")
content = file.read(10);
print content
position = file.tell();
print "Current positon: ", position
position = file.seek(0, 0);
content = file.read(5);
print content
position = file.tell();
print "Current positon: ", position
file.close()
说明:
This is a
Current position: 10
This
Current position: 5
(一)tell() 方法
告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后.
(二)seek(offset [,from])方法
改变当前文件的位置.Offset 变量表示要移动的字节数.From 变量指定开始移动字节的参考位置.
如果 from 被设为 0,这意味着将文件的开头作为移动字节的参考位置.如果设为 1,则使用当前的位置作为参考位置.如果它被设为 2,那么该文件的末尾将作为参考位置.
五,重命名和删除文件
Python 的 os 模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件.
要使用这个模块,你必须先导入它,然后才可以调用相关的各种功能.
rename() 方法
rename() 方法需要两个参数,当前的文件名和新文件名.
语法:
os.rename(current_file_name, new_file_name)
例 5
remove() 方法
import os
os.rename( "test1.txt", "test5.txt" )
你可以用 remove() 方法删除文件,需要提供要删除的文件名作为参数.
语法:
os.remove(file_name)
例 6
import os
os.remove("test5.txt")
来源: http://www.jianshu.com/p/4bb1805ff38e