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())
相关推荐
EntyIU3 分钟前
python开发中虚拟环境配置
开发语言·python
wszy18095 分钟前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
kaizq16 分钟前
AI-MCP-SQLite-SSE本地服务及CherryStudio便捷应用
python·sqlite·llm·sse·mcp·cherry studio·fastmcp
charlie1145141911 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
wjs20241 小时前
Bootstrap5 消息弹窗
开发语言
资生算法程序员_畅想家_剑魔1 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin
IT=>小脑虎1 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习
nbsaas-boot2 小时前
Go vs Java 的三阶段切换路线图
java·开发语言·golang
在路上看风景2 小时前
01. C++是如何工作的
开发语言·c++
码农小韩2 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法