Python基础 文件的读写

文件的读取——open

打开文件需要三步:打开 -> 操作 -> 关闭
同时,打开文件时,需要注意文件路径可能有转义字符的情况:

#注意文件路径可能有转义字符的情况,如以下写法,会报错
file1 = open('d:\note1.txt') #有转义字符\n,会报错,提示Invalid argument

#解决方法1:多加一个\
file1 = open('d:\\note1.txt')

#解决方法2:用/替换\
file1 = open('d:/note1.txt')

#解决方法3:前方加一个r,让后方的转义字符都不生效
file1 = open(r'd:\note1.txt')

#关闭文件
file1.close()

判断文件对象拥有的权限

file = open("d:/note1.txt")
print(file.readable())#判断是否拥有可读权限 True or False
print(file.writable())#判断是否拥有可写权限

文件定位
tell()方法:可获取文件的当前位置
seek(m,n)方法:可改变当前文件的位置
——m表示偏移量,>0代表向右移动,<0代表向左移动
——n指定开始移动字节的参考位置(参数为1或2时,只有在rb[二进制]模式下才生效)
0:移动指针位置到文件开头
1:不移动指针,使用当前位置作为参考位置
2:移动指针到末尾

file1 = open('d:/note1.txt','rb')#文件中共有10个字符(0-9)
print(file1.tell())#输出:0,打印指针的位置,在第0位
file1.seek(6,0)#表示从文件开头,向右偏移6位
print(file1.tell())#输出:6
file1.seek(2,1)#表示从指针当前位置,向右偏移两位
print(file1.tell())#输出:8
file1.seek(-1,2)#表示从文件末尾,向左偏移1位
print(file1.tell())#输出:9

文件读写模式:

r为读取模式,w为写入模式,a为追加模式,不能同时进行读和写

r模式
——r模式为默认模式
——只能读,不能写
——若读取的文件不存在,则报错

#读取模式r,若读取的文件不存在,则报错
file1 = open('d:/note1.txt')#不加读写模式的参数,则默认为读取模式
file2 = open('d:/note1.txt','r')#r为读取模式,只能读,不能写
print(file2.readable())#输出:True
print(file2.writable())#输出:False
print(file2.read())#读取文件内容,并打印出来
file2.close()

w模式
——只可写,不可读
——会清空文件之前的内容
——若文件不存在,会创建新文件并写入

#写入模式w,若写入的文件不存在,会自动创建一个文件,不会进行报错
file1 = open('d:/note1.txt','w')#w为写入模式,只能写入,不能读取,且为清空后重新写入
print(file1.readable())#输出:False
print(file1.writable())#输出:True
file1.write('hello')
file1.close()

a模式
——只可写
——追加写入,不会清空文件之前内容
——若文件不存在,会创建新文件并写入

#追加模式a,若写入的文件不存在,会自动创建一个文件,不会进行报错
file1 = open('d:/note1.txt','a')#a为追加写入模式,不会清空之前文件内的内容
print(file1.readable())#输出:False
print(file1.writable())#输出:True
file1.write('world')
file1.close()

当需要同时进行读取和写入时,可以使用r+、w+、a+

r+模式
——可读,可写
——若文件不存在,则报错
——默认情况下,从文件所在指针位置开始写入

#r+从当前位置开始写入,若后面有内容,则进行覆盖,但不会全部清空
file1 = open('d:/note1.txt','r+')
file1.write('my name is Jewel')
print(file1.tell())#打印指针位置,输出16
file1.seek(0)#使指针位置回到第0位
print(file1.read())#输出:my name is Jewel,若seek(0)不写,则读取不到任何内容
print(file1.tell())#输出:16,读取后,指针位置又到了16
file1.seek(0)
file1.write('花花')#从指针所在位置开始写入 
print(file1.tell())#打印指针位置,输出4,一个汉字占两个字节
file1.seek(0)
print(file1.read())#输出:花花ame is Jewel
file1.close()

w+模式
——可读,可写
——会清空文件之前的内容
——若文件不存在,会创建新文件并写入

file1 = open('d:/note1.txt','w+')
file1.write('ABCDE')
file1.seek(0)
print(file1.read())#输出:ABCDE

a+模式
—— 可读,可写
——文件不存在,不报错
——不会清空文件内容,从末尾进行追加写入

file1 = open('d:/note1.txt','a+')#原文件有5个字符,ABCDE
print(file1.tell())#输出:5
file1.seek(0)#将指针移至开头
file1.write('12345')#写入新的内容
file1.seek(0)#将指针移至开头
print(file1.read())#输出:ABCDE12345

with open

with open方法,要注意缩进,可以不用写close()方法,其他与open方法用法基本一致

with open('d:/note1.txt','w+') as file1:
	file1.write('ABCDE')
	file1.seek(0)
	print(file1.read())#输出:ABCDE

with open方法可以同时打开多个文件

with open('d:/note1.txt','w+') as file1,open('d:/note2.txt','w+') as file2:
	file1.write('ABCDE')
	file1.seek(0)
	file2.write('12345')
	file2.seek(0)
	print(file1.read())#输出:ABCDE
	print(file2.read())#输出:12345

read()、readline()、readlines()的不同用法:
——read()读取文件全部内容
——readline()读取一行内容,可以加一个参数,表示读取几个字符
——readlines()读取整个文件,返回值是一个列表,每个元素是一行

#向目标文件写入多行数据
with open('d:/note1.txt','w+') as file1:
    file1.write('''ABCDE
12345
abcde
54321''')
    file1.seek(0)
    print(file1.read())#输出:按格式输出文本全部内容
    file1.seek(0)
    print(file1.readline(2))#输出:AB
    file1.seek(0)
    print(file1.readlines())#以列表形式输出
#['ABCDE\n', '12345\n', 'abcde\n', '54321']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值