本文内容涉及python打开/创建文件对象,文件的读写、文件指针位置的移动、获取命令行参数。
1. open()
open函数以指定模式返回一个file对象,如: file_object = open(filename,access_mode=’r',buffering=-1),默认是以r模式打开文件。
filename:表示要打开文件名(字符串),可以是绝对路径或相对路径
access_mode:文件打开的模式(字符串), 常用的模式有’r',’w',’a',不是很常用的还有’u'和’b’
‘r’模式:以读方式打开,不能进行写操作,文件必须是已经存在的
‘r+’模式:以读写方式打开,文件必须是已经存在的
‘w’模式:以写方式打开,不能进行读操作,若文件存在,则先清空,然后重新创建;若不存在,则创建文件
‘w+’模式:以读写方式打开,若文件存在,则先清空,然后重新创建;若不存在,则创建文件
‘a’模式:以追加方式打开,不能进行读操作,把数据追加到文件的末尾;若不存在,则创建文件
‘a+’模式:以读写方式打开,把数据追加到文件的末尾;若不存在,则创建文件
‘b’模式:以二进制模式打开,不能作为第一个字符出现,需跟以上模式组合使用,如’rb’,'rb+’等,
‘u’模式:表示通用换行符支持,文件必须是已经存在的buffering:表示访问文件采用的缓冲方式,0表示不缓冲,1表示缓冲一行数据,其他大于1的值表示使用给定值作为缓冲区大小,负数表示使用系统默认缓冲机制,默认是-1,一般使用系统默认方式。
2. file()
file是一个类,file()以指定模式创建一个file对象,跟open()具有相同的功能,可以任意替换。一般使用open来创建一个file对象,使用isinstance(obj,file)来判断obj是否是一个文件对象。
3.read()、readline()、readlines()
read():读取指定数目个字节到字符串中,负数将读取至文件末尾,默认是-1
>>> file_obj = open('test.txt','r') >>> file_obj.read() 'dfdff\n' >>> file_obj.seek(0) >>> file_obj.read(0) '' >>> file_obj.read(1) 'd' >>> file_obj.read(2) 'fd' >>> file_obj.read(-1) 'ff\n' >>> file_obj.seek(0) >>> file_obj.read(1000) 'dfdff\n' >>> file_obj.seek(0) >>> file_obj.read(-5) 'dfdff\n'readline():读取文件的一行,包括行结束符,可以制定size参数的值,默认是-1
>>> file_obj = open('test.txt','r') >>> file_obj.readline() 'dfdff\n' >>> file_obj.readline(2) 'al' >>> file_obj.readline(-1) 'exzhou\n'
>>> file_obj.seek(0) >>> file_obj.readlines() ['dfdff\n', 'alexzhou\n', 'zhoujianghai\n']
>>> file_obj = open('test.txt','w+') >>> file_obj.write('alexzhou') >>> file_obj.write(' python') >>> file_obj.seek(0) >>> file_obj.readline() 'alexzhou python' >>> l = ['my','name','is','zhoujianghai'] >>> l = ' '.join(l) >>> file_obj.writelines(l) >>> file_obj.seek(0) >>> file_obj.readline() 'alexzhou pythonmy name is zhoujianghai' >>> file_obj.write('hello \n') >>> file_obj.write('world \n') >>> file_obj.seek(0) >>> file_obj.readline() 'alexzhou pythonmy name is zhoujianghaihello \n' >>> file_obj.readline() 'world \n'
>>> file_obj.seek(0) >>> file_obj.tell() 0 >>> file_obj.seek(5) >>> file_obj.tell() 5 >>> file_obj.seek(5,1) >>> file_obj.tell() 10 >>> file_obj.seek(5,2) >>> file_obj.tell() 57 >>> file_obj.seek(5,0) >>> file_obj.tell() 5
>>> file_obj = open('test.txt','w+') >>> file_obj.write('hello \n') >>> file_obj.write('world \n') >>> file_obj.seek(0) >>> for eachline in file_obj: ... print eachline, ... hello world >>> file_obj.close()
ps:print后面加一个分号的作用:避免print语句默认在打印的内容后面加一个换行符号。
7. os模块常用属性
由于各操作系统的行分隔符和文件分隔符不一样,所以可以使用os模块的以下属性避免代码移植时碰到这些问题。
os.linesep 行分隔符字符串
os.sep 文件分隔符字符串
os.pathsep 路径分隔符字符串
os.curdir 当前目录字符串
os.pardir 父目录字符串
看下面的打印结果
>>> import os >>> os.sep '/' >>> os.linesep '\n' >>> os.pathsep ':' >>> os.curdir '.' >>> os.pardir '..'
import sys commands = sys.argv print commands
['argv.py', '123']
转载请注明来自:Alex Zhou,本文链接:http://codingnow.cn/python/372.html