小知识,大挑战!本文正在参与“ 程序员必备小知识”创作活动。
<br/>在进行文件操作时,经常会出现一些异常,该如何避免呢?让我们来康康下面一个简单的文件操作需求。
<br/>
文件不存在就自动创建
文件不存在就自动创建,分两种情况,读文件和写文件。需要注意的是文件不存在的情况下直接读取文件会报异常。
<br/>
1、读取文件内容时,文件不存在就自动创建。
import os
file_path = './test.txt'
if not os.path.exists(file_path):
# 不存在就创建
# os.mknod(file_path)
f = open(file_path, mode='w')
f.close()
else:
# 存在则读取文件
with open(file_path, mode='r') as f:
data = f.read()
<br/>
注意:os.mknod()
创建文件的功能,在windows
中不支持。
<br/>
还可以利用异常判断
file_path = './test.txt'
try:
f = open(file_path, mode='r')
except Exception as e:
fp = open(file_path, mode='w')
fp.close()
else:
data = f.read()
f.close
<br/>
上面几种方法都不好用,这里介绍一种比较巧妙方法,就是以追加和读取模式 a+
打开文件,文件不存在会自动创建文件,不仅可以写还可以读取并且还不会报错,值得你拥有。
file_path = './test.txt'
with open(file=file_path, mode='a+') as f:
# 可以写数据
f.write('test')
# 可以读数据
data = f.read()
print(data)
<br/>
2、写入数据文件中时,文件不存在就自动创建
这个就比较简单直接用 w
模式,文件不存在会自动创建
file_path = './test.txt'
with open(file=file_path, mode='w') as f:
f.write('test')
<br/>
注意:文件写入模式w
会把文件中原有数据清空然后在把新数据写进去,如果需要追加,请把文件模式改用成a
进行追加数据。
<br/>
open()
常用的文件模式
模式 | 描述 |
---|---|
b |
二进制模式。 |
+ |
打开一个文件进行更新(可读可写)。 |
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头。 |
w |
打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ |
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
<br/>
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | √ | √ | √ | √ | ||
写 | √ | √ | √ | √ | √ | |
创建 | √ | √ | √ | √ | ||
覆盖 | √ | √ | ||||
指针在开始 | √ | √ | √ | √ | ||
指针在结尾 | √ | √ |
<br/>
尾语
✍ 用 Code 谱写世界,让生活更有趣。❤️
✍ 万水千山总是情,点赞再走行不行。❤️
✍ 码字不易,还望各位大侠多多支持。❤️