python文件(读写)处理相关,为啥报错io.UnsupportedOperation: not readable,异常处理

一开始代码

 #打开文件
    f = open('a.txt','w')
    #文件写入
    f.write("hello,world")
    #文件读取
    print(f.read())
    #关闭文件
    f.close()

修改之后的代码

#打开文件
    f = open('a.txt','w+')
    #文件写入
    f.write("hello,world")
    f.close()
    #文件读取
    f = open('a.txt')
    print(f.read())
    #关闭文件
    f.close()

为啥就好了呢

1、你是用open打开一个文件,此时调用的是w写入模式,下面使用read是没有权限的。
2、使用write写入一个字符,但是此时并没有真正的写入,而是还存在与内存中。此时执行read读取的为空字符。需要先执行a.close()关闭文件,再使用f = open(‘a.txt’),最后再用f.read()打开文件读入,才可以读到最新的写入内容

科普

r:只读模式(默认)
w:写模式
a:追加模式
+:读写模式
b:二进制模式,例如声音,视频,图像等

扩展(追加写入)

 ##追加写入
    f = open('a.txt','a')#追加写入
    f.write("hello,world1")
    f.close()
 ##换行追加写入
    f = open('a.txt', 'a')  # 换行追加写入
    f.write("hello,world8888\n")
    f.close()

扩展读

	f = open('a.txt')
    print(f.read())#是字符串形式,一次性读出
 	f = open('a.txt')
    print(f.readline())#读取行,如果读取多行需要写多次,第一次执行读取的第一行
    print(f.readline())#读取第2行
	f = open('a.txt')
    print(f.readlines())#读取所有行,注意重复调用会导致第二次读取空列表 

#怎么让读取的内容不带换行符呢

f = open('a.txt')
b=f.readlines()
for i in b:
	print(i)

读取文件的另外一种方式 with open,推荐使用
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

try:
    f=open('/Users/data/a.txt','r')
    print(f.readlines())
except Exception as e:
    print(e)
finally:
    f.close()#报不报错都会执行

但是这样就会很繁琐,Python引入了with语句来自动帮我们调用close()方法

with open('/Users/data/a.txt','r') as f:
    print(f.readlines())

with创建临时运行环境
作用:with用于创建一个临时的运行环境,运行环境中的代码执行完后自动安全退出环境。
对比:使用open进行文件操作时建议使用with创建运行环境,可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出,即使发生错误,退出运行时环境时也能安全退出文件并给出报错信息

你可能感兴趣的:(Python,python)