file related function
open,close,read,write
1. open 函数
file_obj = open(file_name , access_mode, buffering)
- file_name, 一般用绝对路径
- access_mode,读写模式
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 - buffering
0,就不会有寄存;
1,访问文件时会寄存行;
大于1的整数,表明了这就是的寄存区的缓冲大小;
负值,寄存区的缓冲大小则为系统默认
access_mode
一般用的是r+/w+
r+打开一个文件用于读写。文件指针将会放在文件的开头。
读写,文件不存在不会新建文件,抛出异常;
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
读写,文件不存在会新建文件;
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
读写,追加append模式
2. read 读函数/seek 读指针函数
- read(),当前位置-最后位置 读取,str
- readline(), 读取当前行,str
- readlines(),读取当前位置-最后位置,list
- for line in fileobj: 循环读取当前行,str
- seek()文件指针移动函数,返回None type
- tell()返回文件指针当前位置,返回一个长整型long
read 读函数
# encoding: UTF-8
# Author:SXQ
# E-mail: lvhuijia@gmail.com
# 2.txt格式
'''
0 80D3 5 1988
1 80D4 5 1111
2 8060 4 122
3 80BA 6 1223
4 8067 4 13451
'''
file_name = r'C:\Users\xshi\Desktop\2.txt'
obj = open(file_name, 'r+')
# 打开文件时,指针指在文件的开头;
# 当有读取操作的时候,指针往下移;
# 当指针移到最后时,无法进行读操作,读操作不会失败,返回空;
print obj
print type(obj)
obj.close()
# EXP:
#一次读取全部的文件内容
#当前指针位置到文件最后
#存储为str
print 'read()'
obj = open(file_name, 'r+')
str = obj.read()
print str
print type(str)
obj.close()
#读取一行
#存储为str
print 'readline()'
obj = open(file_name, 'r+')
str = obj.readline()
print str
print type(str)
obj.close()
#一次性读取所有文件内容
#存储为list
print 'readlines()'
obj = open(file_name, 'r+')
str = obj.readlines()
# lineList = list(obj)同上一行
print str
print type(str)
obj.close()
#######################################################
print '华丽的分割线'
print '#############################################'
#读取文件10个字节
print 'read(10)'
obj = open(file_name, 'r+')
str = obj.read(10)
print str
print type(str)
obj.close()
#对文件对象进行for循环
obj = open(file_name, 'r+')
for line in obj:
print line
print type(line)
#返回str
obj.close()
#对文件对象readlines()进行for循环
obj = open(file_name, 'r+')
for line in obj.readlines():
print line
print type(line)
#返回str
obj.close()
seek 读指针移动函数
seek(offset,where): where=0从起始位置移动,1从当前位置移动,2从结束位置移动
- f.seek(p,0) 移动当文件第p个字节处,绝对位置
- f.seek(p,1) 移动到相对于当前位置之后的p个字节
- f.seek(p,2) 移动到相对文章尾之前的p个字节
# encoding: UTF-8
# Author:SXQ
# E-mail: lvhuijia@gmail.com
# 2.txt格式
'''
0 80D3 5 1988
1 80D4 5 1111
2 8060 4 122
3 80BA 6 1223
4 8067 4 13451
'''
file_name = r'C:\Users\xshi\Desktop\2.txt'
obj = open(file_name, 'r+')
str = obj.read()
print str
obj.seek(0,0)
str1 = obj.read()
print str1
obj.close()
tell返回当前读指针位置
# encoding: UTF-8
# Author:SXQ
# E-mail: lvhuijia@gmail.com
# 2.txt格式
'''
0 80D3 5 1988
1 80D4 5 1111
2 8060 4 122
3 80BA 6 1223
4 8067 4 13451
'''
file_name = r'C:\Users\xshi\Desktop\2.txt'
obj = open(file_name, 'r+')
str = obj.read(10)
x = obj.tell()
print type(x)
print x
print str
obj.close()
3. write 函数
- obj.write()
obj.write(str), str必须为一字符串
无返回值 - obj.writelines()
obj.writelines(list1),list1必须为一序列(list,tuple,dict),且序列内元素必须是字符串
无返回值
# encoding: UTF-8
# Author:SXQ
# E-mail: lvhuijia@gmail.com
file_name_new = r'C:\Users\xshi\Desktop\3.txt'
obj = open(file_name_new, 'r+')
print '文件名字为:', obj.name
# obj.write(str), str必须为一字符串
# 无返回值
str = '111111111111,2222'
print obj.write(str)
# obj.writelines(list1),list1必须为一序列,且序列内元素必须是字符串
# 无返回值
list1 = ['\n''22\n','2','shit','chi']
print obj.writelines(list1)
obj.close()