文件IO
#文件的基本操作
1.在python中你可以用file对象做大部分的文件操作
2.一般步骤:
先用python内置的open()函数打开一个文件,并创建一个file对象,
然后调用相关方法进行操作
语法:
file_object = open(file_name[,acess_mode][,buffering])
file_name变量是一个包含了你要访问的文件名称的字符串值
access_mode决定了打开文件的模式:只读,写入,追加等.这个参数是非强制的,默认文件访问模式为只读(r)
buffering:如果buffering的值设为0,就不会有寄存.如果buffering值取1,访问文件时会寄存
如果将buffering的值设为大于1的整数,表明了这就是寄存区的缓冲大小,如果取负值,寄存区的缓冲大小则为系统默认
不同模式打开文件的完全列表:
file对象的属性
一个文件被打开后,你有一个file对象,你可以得到有关文件的各种信息
以下是和file对象相关的所有属性的列表:
file.closed 返回true如果文件已被关闭,否则返回false
file.mode 返回被打开文件的访问模式
file.name 返回文件的名称
file.softsapce 如果用print输出后,必须跟一个空格符,则返回false,否则返回true
doc = "D:\python workspace\log.txt" print("演示open") fo = open(doc,‘w‘) #w代表写入 print("文件名是",fo.name) print("是否关闭了文件",fo.closed) print("打开方式",fo.mode) print("\n演示close") fo = open(doc,‘w‘) print("文件名是",fo.name) #关闭打开的文件 fo.close() print("是否关闭了文件",fo.closed) print("\n演示写入") fo = open(doc,‘w‘) fo.write("好与坏") #关闭打开的文件 fo.close() ‘‘‘ w 换成 wb,会报错 TypeError: ‘str‘ does not support the buffer interface ‘‘‘ print("\n演示read") #打开一个文件 fo = open(doc,"r+")#r+ 读写 str = fo.read() print("文件中的内容是",str) #关闭文件 fo.close()
结果:
演示open 文件名是 D:\python workspace\log.txt 是否关闭了文件 False 打开方式 w 演示close 文件名是 D:\python workspace\log.txt 是否关闭了文件 True 演示写入 演示read 文件中的内容是 好与坏
文件名/t会有转义,三种写法避免:
fileName = r"D:\test1\test2\test.txt" 加r
filename = "D:\\test1\\test2\test.txt" 加双\\
filename = "D:/test1/test2/test.txt" \改成/ (推荐这种)
文件定位
1.tell()方法告诉你文件内的当前位置
2.seek(offset[,where])方法改变当前的位置
offset变量便是要移动的位数.where变量置顶开始移动的参考位置
where为0表示文件开始处,这是默认值;1表示当前位置;2表示文件结尾
#打开一个文件 doc = "D:/python workspace/log.txt" fo = open(doc,"r+") str = fo.read() print("文件中的内容是:",str) #查找当前位置 position = fo.tell() print("当前位置:",position) #把指针再次重新定位到文件开头 position = fo.seek(0,0) str = fo.read(2)#读两个字符 print("文件中的内容是:",str) str = fo.read(-1)#读光标之后的全部 print("文件中的内容是:",str) #关闭打开的文件 fo.close()
结果:
文件中的内容是: 好与坏 坏与好 当前位置: 13 文件中的内容是: 好与 文件中的内容是: 坏 坏与好
练习:以w方式打开文件,通过write和writelines分别写入内容
file.write(str) 将字符串写入文件,没有返回值
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
#打开一个文件 doc_1 = "D:/python workspace/log1.txt" fo = open(doc_1,"w") fo.write("试试怕什么,又不会怀孕1") fo.writelines(["试试怕什么1\n","又不会怀孕2"]) #关闭文件 fo.close()
write是写入一行
writelines可以写入多行,用\n分行
结果:
以w+方式打开文件,写两行数据,读取文件全部内容
doc_2 = "D:/python workspace/log2.txt" fo = open(doc_2,"w+") fo.writelines(["试试怕什么1\n","又不会怀孕2"]) #查看当前位置 position = fo.tell() print("当前位置:",position) #重置位置 #把指针再次重新定位到文件开头 position = fo.seek(0,0) #读取文件 str1 = fo.read() print(str1) #readlins()读出是列表 #str2 = fo.readlines() #for i in str2:# print(i) #关闭文件 fo.close()
第一次写的时候,发现打的空,
加入查找当前位置语句,发现写完后,光标在最末位,so重置到初始位置后,再读出所有文件
结果:
当前位置: 24
试试怕什么1
又不会怀孕2
清空一个文件
file.truncate([size]):截取文件,截取的字节通过size置顶,默认为当前额外年间位置
如果没有指定size则会从当前位置截取,也就相当于都删除了