python 文件操作

文件对象不仅可以用来访问普通的磁盘文件,也可以访问任何其他类型抽象层面上的“文件”。一旦设置了合适的“钩子”,你就可以访问具有文件类型接口的其他对象,就好像访问普通文件一样(摘自《python核心编程》第二版)

打开文件

open( )和file( )

我们要对文件进行操作,首先要做的就是打开一个文件,python中提供了open( )和file()两个内建函数供我们使用

  • open( )基本语法如下
    flie_object = open(file_name,access_mode = ‘r’,buffering = -1)
    其中file_name 是一个字符串,就是要打开文件的路径(可以是相对路劲也可以是绝对路径)
    可选变量access_mode也是一个字符串,代表文件的打开模式,常用的有’r’读,’w’写,’a’追加
    另外一个参数buffering 用于指示访问文件所采用的缓冲方式,0代表不缓冲,1代表缓冲一行,任何大于1的值代表给定缓冲区的大小,不提供该参数或者使用负数,代表使用系统默认缓冲机制
  • file( )是一个工厂函数,具有和open( )相同的功能,可以任意替换
  • 使用open打开文件,处理后要将文件关闭,否则在程序运行结束之前都不将文件句柄释放,将一直占据内存空间,如果担心忘记,可以使用with,具体用法如下
f = open("grade.txt",'r',buffering = -1)
f.read()
'this is a text!'
f.close()

with open("grade.txt",'r') as f:
    print f.read()    
this is a text!
  • 文件的打开模式
文件模式说明
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rU,Ua以读方式打开,同时提供通用换行支持
w打开一个文件只用于写入。如果该文件已存在则,原文件会被清空,如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

文件的读

  • read( )方法用来直接读取字节到字符串中,最多读取给定数目size个字节,如果没有给定或值为负,文件被读至末尾,在读取文件的时候实际上存在一个类似于指针的东西,随着读取的字节进行移动,文件读完了,指针也就移到了最末尾,通过tell()方法可以返回这个指针当前的位置。所以很多时候当你读完一个文件,又马上调用read方法时就会返回为空,因为你之前读的时候指针已经指到了末尾,这时候你又进行读,已经没有可以返回的内容给你了,通过seek方法可以将这个指针位置调到你所想读的地方。
f = open("grade.txt",'rU',buffering = -1)
print f.read()
1、r 打开只读文件,该文件必须存在。 
2、r+ 打开可读写的文件,该文件必须存在。 
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失
4、w+ 打开可读写文件,若文件存在则文件长度清为零,
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,
7、上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合
print f.read()

print f.tell()
561
f.seek(0)
print f.tell()
0
print f.read()
1、r 打开只读文件,该文件必须存在。 
2、r+ 打开可读写的文件,该文件必须存在。 
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失
4、w+ 打开可读写文件,若文件存在则文件长度清为零,
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,
7、上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合

f.seek(0)
print f.read(30)
1、r 打开只读文件,该
  • readline()方法读取文件的一行,(读取下一个行结束符前的所有字节)然后整行(包括行结束符)作为字符串返回,也有一个可选参数size,默认为-1代表行结束符
f = open("grade.txt",'rU',buffering = -1)
print f.readline()
1、r 打开只读文件,该文件必须存在。 
  • readlines()方法读取所有(剩余的)行,然后把它们作为一个字符串列表返回(每一行为一个元素)但一般在读较大文件时不推荐使用此方法,因为这个方法,需要把一个文件中所有内容以列表形式读入内存中,十分消耗内存空间。

文件的写

  • write()方法,将字符串写入文件中,通过seek可以将定位到你想写的位置,但是当你写入字符时会将该文件原有的内容覆盖(版本2可以用seek定位,版本3好像不行)
f = open("grade.txt",'r+',buffering = -1)
print f.read()
jalsdjflajsdfljasldf
jlaskdjflasjdflja
jnladskjflakjsdklfkdjfalkjdajlsdjj

f.seek(0)
f.write("----------------------------------")
f.flush()
f.close()
f = open("grade.txt",'r+',buffering = -1)
print f.read()
----------------------------------dflja
jnladskjflakjsdklfkdjfalkjdajlsdjj
laksdjflakjfldalowiefjaj
jladsjflajdljfakjdks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值