打开文件
open(name[, mode[, buffering]])
open函数只有一个参数name是必要的。name参数是文件名,然后函数返回一个file对象,如果我们要打开一个叫做somefile.txt的文件,且这个文件存在~/text文件夹下,你可以这样打开他
>>> f = open(r'~/text')
文件模式
默认的文件打开后,是返回一个只读文件,如果你想写在文件中的话,必须显示的定义mode参数,下面是mode参数最经常使用的值
Value Description
'r' Read mode
'w' Write mode
'a' Append mode
'b' Binary mode (added to other mode)
'+' Read/write mode(added to other mode)
其中’+‘可以添加在任何一个模式后面,表示可读可写
‘b’用来改变不同的文件处理方式,b表示binary,像视频,图像等等信息就是一个二进制文件,可以读的时候加上'rb'模式,这个表示以二进制的形式读取文件
Buffering
open函数的第三个参数是用来控制文件的缓冲的,如果参数的值是0,那么IO是无缓冲的,直接在文件上操作,如果值为1或者True,那么IO操作会在内存中有个缓冲区,文件知道你使用了flush或者close,文件修改的内容才会更新到文件,如果是一个更大的数字的话,那么就是指定缓冲区的大小,单位是byte
文件的一些基本方法
首先要知道三种标准流,基本输入流,sys.input,可以是自己键入的,可以来自其他的程序的输出流通过管道传输过来。基本输出流sys.stdout,用来输入数据,一般数据写在基本输出流上都是打印在显示器上,但是你可以重定向他成为另外一个程序的输入流。基本错误流,sys.stderr,许多情况下他都与sys.stdout相似。
读写
文件类对象的最重要的两个方法就是读和写,如果文件类对象名为f,那么你可以通过f.write来写入数据,也可一通过f.read来读数据,下面是例子。
f = open('somefile.txt', 'w')
f.write('Hello, ')
f.write('World!')
f.close()
下面是读文件的例子。
>>> f = open('somefile.txt', 'r')
>>> f.read(4)
'Hell'
>>> f.read()
'o, World!'
下面是从标号准流读数据的例子:
# somescript.py
import sys
text = sys.stdin.read()
words = text.split()
wordcount = len(words)
print 'Wordcount:', wordcount
你可以这样使用上面的程序:
cat somefile.txt | python somescript.py
随机访问
随机访问就是直接把文件当作一个流来处理
seek(offset[, whence])
移动到当前的位置,offset是一个位移量但是字节,whence为0是默认的,表示从文件头开始算offset,值为1表示从当前位置开始算offset,值为2表示从文件尾开始算位移量。下面是一个例子:
>>> f = open(r'c:\text\somefile.txt', 'w')
>>> f.write('01234567890123456789')
>>> f.seek(5)
>>> f.write('Hello, World!')
>>> f.close()
>>> f = open(r'c:\text\somefile.txt')
>>> f.read()
'01234Hello, World!89'
tell方法用来返回当前的位置
>>> f = open(r'c:\text\somefile.txt')
>>> f.read(3)
'012'
>>> f.read(2)
'34'
>>> f.tell()
5L
读写整行
readline函数是读取一整行,可以不带参数也可以赋一个整数n,n表示最大的读取的范围,使用方法如: somefile.readline()
writeline()与readline的方法相反,给他一个字符串的list,那么他会把这些list都写到文件中去,但是不会增加新的一行,所以,必须自己手动增加换行,所以一般可以用write函数代替writeline
文件的关闭
文件是写在缓存中的,只有当你flush或者close的时候会写到硬盘上面。所以当你的程序在写的时候,另外一个程序读这个文件会发现,文件并没有改边。在程序退出的时候,会自动close所有的文件。但是最好要显示的关闭文件,因为,如果你的文件发生了什么意外崩溃的话,可能修改并不会写入文件。而且,如果你不关闭的话,你会一直占有写入锁,这样,其他的程序则无法修改此程序。如果你并不确定你的文件是否已经关闭,你可以使用如下类似的代码:
# Open your file here
try:
# Write data to your file
finally:
file.close()
在2.5以后的版本中加入一了with语句,是哟噢那个方法如下:
with open("somefile.txt") as somefile:
do_something(somefile)
with语句用来打开一个文件,并且赋予一个变量名给它,然后你可以在语句的body中对文件进行操作,当文件结束后,会自动关闭。即使中间发生了异常,也会自动关闭,在2.5的版本你使用with语句的话,那么需要加入下面一句话:
from __future__ import with_statement