目录
1.文件操作
查看当前操作系统默认编码格式
import sys
print(sys.getdefaultencoding())
utf8
endcoding_utf8 = sys.getdefaultencoding()
文件的访问模式
"""mode参数 文件的访问模式
r 只读,文件不存在就报错【默认模式】[常用]
w 覆盖写,文件不存在就创建文件
a 追加写,文件不存在就创建文件(append,接着写)[常用]
b表示 byteString
rb 二进制 只读,文件不存在就报错
wb 二进制 覆盖写,文件不存在就创建文件
ab 二进制 追加写,文件不存在就创建文件(append,接着写)
r+ 读+覆盖写,文件不存在就报错
w+ 覆盖写+读,文件不存在就创建文件,注意:该模式打开文件瞬间清空文件内容!
a+ 追加写+读,文件不存在就创建文件(append,接着写)[常用]
"""
python
# 写文件。w文件不存在会新建,不会报错
with open('2.txt',mode='w',encoding='UTF-8') as file_obj:
file_obj.write('hello中国')
# 读文件
with open('1.txt',mode='r',encoding='UTF-8') as file_obj:
"""
如果文件较小,可以选择read()/readlines();
如果文件较大,并且需要对每一行单独处理的时候,可以选择readline()
"""
# read(n):以字符形式读取文件内容。如果不传递,一次性读取全部内容;如果传递参数n,只读取n个字符
# result = file_obj.read()
# print(result)
print("-" * 30)
result = file_obj.read(4)
print(result)
result = file_obj.read(4)
print(result)
# readline:一次性读取一行内容
result = file_obj.readline()
print(result)
result = file_obj.readline()
print(result)
# readlines:以行的形式,将文件内容一次性全部读取出来。返回值类型是列表
result = file_obj.readlines()
print(result,type(result))
print("-"*30)
# 1- 打开文件
file_obj = open('1.txt',mode='r')
# 2- 关闭文件。释放资源
file_obj.close()
# 工作中操作文件推荐的写法。优点:可以自动关闭文件
with open('1.txt',mode='r') as file_obj:
# 文件相关读写操作
pass
2.写入操作
python
# 写入操作
print('--'*20+'写入操作')
with open(
'./test1.txt', mode='w', encoding=endcoding_utf8
) as f:
f.write('我是白白的wj\n')
f.write('我是黑黑的wj\n')
f.write('您好\n')
f.write('我是黄黄的wj\n')
f.write('我是红红的wj\n')
3.读取全部操作
python
# 读全部
print('--'*20+'读全部')
with open(
'./test1.txt',mode='r',encoding=endcoding_utf8
) as f:
print(f.read(2)) # 先读两行
# 读取规定数量的字符,并换行
# 结果为:我是
print(f.read())
#白白的wj
# 我是黑黑的wj
# 您好
# 我是黄黄的wj
# 我是红红的wj
4.读一行操作
python
# 读一行
print('--'*20+'读一行')
with open(
'./test1.txt',mode='r',encoding=endcoding_utf8
) as f:
print(f.readlines(1))
5.逐行读
python
# 逐行读
print('-'*20 + '逐行读')
with open(
'./test1.txt',mode='r',encoding=endcoding_utf8
) as f:
while True:
ret = f.readline()
if ret == '': # # 如果读出来是空串,说明读完了
break
print(ret)
'''
我是白白的wj
我是黑黑的wj
您好我是黄黄的wj
我是红红的wj
'''
# # 读全部返回列表
print('-'*20 + '读全部返回列表')
with open(
'./test1.txt',mode='r',encoding=endcoding_utf8
) as f:
print(f.readlines())
# 注意是readlines ,后面有s
# ['我是白白的wj\n', '我是黑黑的wj\n', '您好我是黄黄的wj\n', '我是红红的wj\n']
6.文件备份案例
python
# 获得新文件的名称
old_file_name = 'a.test.txt'
# 先获取后缀
file_name_list = old_file_name.split('.')
file_suffix = file_name_list[-1]
# 获取文件名称前缀
file_name_tmp = file_name_list[:len(file_name_list)-1]
file_name_prefix = '.'.join(file_name_tmp)
# 拼接得到新文件名
new_file_name = file_name_prefix + '[备份].' + file_suffix
# 读取旧文件内容
with open(old_file_name,mode='r',encoding='UTF-8') as old_file:
content = old_file.read()
# 写入到新文件中
with open(new_file_name,mode='w',encoding='UTF-8') as new_file:
new_file.write(content)
7.os模块操作文件系统
python
import os
# mv
# os.rename('1.txt', '1.new.txt')
# os.remove('1.new.txt')
# mkdir
# os.mkdir('目录')
# os.rmdir('目录')
# 文件/目录存在,返回True
# print(os.path.exists('目录'))
# print(os.path.exists('2222.txt'))
# 判断是否是一个文件
print(os.path.isfile('目录'))
print(os.path.isfile('2.txt'))
# 文件不存在,不会报错,只会返回False
print(os.path.isfile('3332.txt'))
print(os.getcwd())
os.chdir('../day02')
print(os.getcwd())
# ls
print(os.listdir('./'))
8.异常
python
try:
print("try执行前")
print(1 / 0) # ZeroDivisionError
# print('a' + 1) # TypeError
print("try执行后")
except Exception as e:
print("异常处理代码",e)
else:
print("没有异常")
finally:
# 绝大多数使用场景:用来释放资源,例如:关闭文件、关闭数据库连接
print("最终要执行的代码")
9.异常传递
python
import traceback
def fun_1():
print('foo start')
print(num) # todo 报错的源头
print('foo end')
def fun_2():
print('bar start')
# 代码运行至此才会引发异常
fun_1() # todo 报错发生的导火索
print('bar end')
try:
fun_2()
except Exception as e:
print(e)
print("-"*30)
print(traceback.format_exc())