一、打开文件
open函数用来打开文件
open(name[, mode[, buffering]])
open函数使用一个文件名作为唯一的强制参数,返回一个文件对象。
将文件对象赋予一个变量,在关闭文件时有实际的好处,应该尽量这么做。
f=open(r'C:\text\somefile.txt')
如果打开的文件在指定路径下不存在,则返回一个IO异常。
1.1
文件模式
r
读模式
w
写模式
a
追加模式
b
二进制模式(可添加到其他模式中使用)
+
读/写模式(可添加到其他模式中使用)
1.2
缓冲
open函数的第三个参数buffering可以设置文件的缓冲。
如果参数是0,就是无缓冲的,所有操作针对于硬盘。
如果参数是1,是有缓冲的,只有当flush或者close时参会更新硬盘上的数据。
二、基本的文件方法
2.1
读和写
f=open('somefile.txt','w')
f.write(something)
f.close()
f=open('somefile.txt','w')
f.read()
2.2
管式输出(UNIX的shell)
管道将一个命令的输入和下一个命令的输出连接在一起
2.3
读写行
file.readline()
读取单独一行
file.readlines()
读取所有行并将其作为列表返回
file.writelines()
将一个字符串列表返回
file.write()
2.4
关闭文件
需要确保每次使用文件后将文件关闭,以免发生文件损坏或丢失。
方法一:使用try/finally语句
#open your file here
try:
#write data to your file
finally:
file.close()
方法二:使用with语句
with open("somefile.txt") as somefile:
do something(somefile)
文件在语句结束后自动关闭
三、对问价内容进行迭代
3.1 按字节处理
f=open(filename)
while True:
char=f.read(1)
if nor char:break
process(char)
f.close()
3.2
按行操作
f=open(filename)
while True:
line=f.readline()
if not line:break
process(line)
f.close()
3.3
读取所有内容
如果文件不大,可以使用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.4
使用fileinput实现惰性行迭代
import fileinput:
for line in fileinput.input(filename):
process(line)
fileinput.input()返回能够用于for 循环遍历的对象
filename()返回当前文件的名称
fileno()返回当前累计的行数
filelineno()返回当前文件的行数
isfirstline()检查当前行是否是文件的第一行
nextfile()关闭当前文件,移动到下一个文件
close
关闭序列,结束迭代
示例:
import fileinput
for line in fileinput.input(inplace=True):#inplace=True代表原地修改
line=line.rstrip()#返回字符串副本,默认空白字符被从字符串结尾处去掉
num=fileinput.lineno()#当前的累计行数
print ''%-40s # %2i" %(line,num)
3.5 文件迭代器
文件对象是可迭代的,也就是说可以在for循环中使用
f=open(filename)
for line in f:
process(line
)
f.close()
如果要得到readlines的效果,可以:
lines=list(open('somefile.txt'))