- 创建文件对象:内建函数open()
利用内建函数open()创建文件对象(打开文件后记得close(),防止断电异常等造成数据丢失)
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
常用参数file指定文件位置(文件分隔符需要转义),mode:指定文件打开的模式,默认mode='t'(文本模式)
示例:
#打开文件,创建文件对象
f = open('D:\\Python\\file\\text1.txt')
print(f) #打印<_io.TextIOWrapper name='D:\\Python\\file\\text1.txt' mode='r' encoding='cp936'>
#文件中的具体内容
'''
练习python文件打开
文件打开
文件
'''
- 读取文件f.read([size])
参数size可不指定:默认读取所有,当size指定为负值时效果与未指定时一样读取所有内容,指定size值则从文件指针位置处读取指定数量的字符数(注意是字符数不是字节数)
实例:
print(f.read())
#打印所有内容
'''
练习python文件打开
文件打开
文件
'''
#将文件指针定位到文件开头
f.seek(0,0)
#读取前10个字符
print(f.read(10)) #'练习python文件'
#读取文件指针之后所有内容,从第11个字符开始到最后
print(f.read(-1))
#内容
'''
打开
文件打开
文件
'''
- 读取文件f.readline()
#文件指针重新定位到开始位置
f.seek(0)
#从文件指针位置读取一行,一行的截止位置标识:\n
#按行读取
print("====f.readline()====")
print(f.readline())
print(f.readline())
print(f.readline())
结果:
- 读取文件f.readlines()
读取所有行存到list中,每行为list中的一个元素
#读取所有行
#print(f.readlines()) #['练习python文件打开\n', '文件打开\n', '文件\n', '\n']
allLines = f.readlines()
#遍历
for eachLine in allLines:
print(eachLine)
结果:
注:python的文件对象提供更简单的遍历文件方式
#直接遍历文件对象中内容
for eachLine in f:
print(eachLine )
- 移动文件指针位置f.seek(offset,from):当前指针所在位置(字节数值)
参数offset:要偏移的字节数,from:文件指针开始偏移的位置,from=0:从文件开始位置,from=1:从文件指针当前位置,from=2:从文件末尾
注:默认打开文件的方式为文本模式,这种模式下调用seek()方法时如果from参数不是0,会报错:io.UnsupportedOperation: can't do nonzero cur-relative seeks(文本模式打开只允许从文件开头为相对位置),此时需要修改文件打开的方式
#文件打开模式rb
f = open('D:\\Python\\file\\text1.txt','rb')
#文件指针重新定位到文件开始位置
f.seek(0,0)
f.seek(4,0) #从开头位置偏移4个字节(两个汉字)
#打印偏移后的当前行内容
#print(f.readline()) #'python文件打开'
#从文件指针当前位置偏移2个字节
print(f.seek(2,1)) #值为6
#读取6个字符
print(f.read(6)) #"b'thon\xce\xc4'",包括四个字母1个汉字
#从文件末尾开始读取
print(f.tell()) #当前文件指针所在位置:12
print(f.seek(10,2)) #该文件内容结尾文件指针为38,w文件末尾后再偏移10个字节,打印:48
- f.tell():查看当前文件指针位置,如上代码
- f.close():关闭打开的文件
- f.write(str):写入字符串,文件末尾追加
#open('文件路径','打开方式'),如果要写入内容需写入权限,文件打开方式至少包含w/+等
f =open('D:\\Python\\file\\text1.txt',"r+")#转义磁盘\
print(f) #<_io.TextIOWrapper name='D:\\Python\\file\\text1.txt' mode='r' encoding='cp936'>
#f.write(str)文件末尾追加字符串
str2019 = '2019年'
print(f.write(str2019)) #返回的是字符串的字符数长度:5
print(list(f))
f.close()