文件内建函数[open()和file()]
file_object= open(file_name, access_mode='r', buffering=-1)
file_name是包含要打开的文件名字的字符串,它可以是相对路径或者绝对路径
access_mode代表文件打开的模式.
buffering可选参数,用于指示访问文件所采用的缓冲方式.其中0表示不缓冲,1表示只缓冲一行数据,任何其它大于1的值代表使用给定值作为缓冲区大小.不提供该参数或者给定负值代表使用系统默认缓冲机制。
工厂函数file()
open()和file()函数具有相同的功能,可以任意替换.所看到任何使用open()的地方,都可以使用file()替换它.建议使用open()来读写文件,在您想说明您在处理文件对象时使用file(),例如
ifinstance(f, file) .
输入
read()方法用来直接读取字节到字符串中,最多读取给定数目个字节.如果没有给定size
参数(默认值为-1)或者size值为负,文件将被读取直至末尾.
readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节).然后整行,包括行
结束符,作为字符串返回.和read()相同,它也有一个可选的size参数,默认为-1,代表读至
行结束符.如果提供了该参数,那么在超过size个字节后会返回不完整的行.
readlines()方法并不像其它两个输入方法一样返回一个字符串.它会读取所有(剩余的)行然
后把它们作为一个字符串列表返回.
输出
write()内建方法功能与read()和readline()相反.它把含有文本数据或二进制数据块的字符串写入到文件中去.
和readlines()一样,writelines()方法是针对列表的操作,它接受一个字符串列表作为参数,将它们写入文件.行结束符并不会被自动加入,所以如果需要的话,你必须在调用writelines()前给每行结尾加上行结束符.
注意这里并没有"writeline()"方法,因为它等价于使用以行结束符结尾的单行字符串调用write()方法.
核心笔记:保留行分隔符
当使用输入方法如read()或者readlines()从文件中读取行时,Python并不会删除行结束符.这个操作被留给了程序员.例如这样的代码在Python程序中很常见:
f= open('myFile', 'r')
data= [line.strip() for line in f.readlines()]
f.close()
类似地,输出方法write()或writelines()也不会自动加入行结束符.你应该在向文件写入数据前自己完成。
文件内移动
seek()方法
0,1, 2分别对应着常量SEEK_SET,SEEK_CUR, 以及SEEK_END.
offset字节代表相对于某个位置偏移量.
一般使用下面用法
for eachLine in f:
:
一般不再使用如下
for eachLine in f.readline():
:
filename= raw_input('Enter file name: ')
fobj= open(filename, 'w')
whileTrue:
aLine= raw_input("Enter a line ('.' to quit): ")
if aLine != ".":
fobj.write('%s%s'% (aLine, os.linesep)
else:
break
fobj.close()
调用write()方 法 时必 须 加 上 换 行 符 。 而 且在 键 盘 上 很 难 输 入一 个EOF(end-of-file)字符,所以,程序使用句号(. )作为文件结束的标志,当用户输入句号后会自动结束输入并关闭文件.
tell()方法的使用
>>>f = open('/tmp/x', 'w+')
>>>f.tell()
0
>>>f.write('test line 1\n') #加入一个长为12的字符串[0-11]
>>>f.tell()
12