2023.12.23 python高级语法 _文件写入操作_备份案例_os模块_异常传递

目录

1.文件操作

2.写入操作

3.读取全部操作

4.读一行操作

5.逐行读

6.文件备份案例

7.os模块操作文件系统

8.异常

9.异常传递


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())
相关推荐
心中有国也有家2 小时前
GE图引擎深度解析——CANN的计算图优化与执行引擎
人工智能·pytorch·python·学习·numpy
卷毛的技术笔记3 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥3 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog3 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008113 小时前
FastAPI APIRouter
开发语言·python
Benszen3 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木4 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r4 小时前
Java调用链MCP分析工具
java·python·ai编程
杨充4 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法