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

2023-12-24 15:48:53

目录

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,接着写)[常用]
"""

# 写文件。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.写入操作

# 写入操作
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.读取全部操作

# 读全部
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.读一行操作

# 读一行
print('--'*20+'读一行')
with open(
    './test1.txt',mode='r',encoding=endcoding_utf8
) as f:
    print(f.readlines(1))

5.逐行读

# 逐行读
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.文件备份案例


# 获得新文件的名称
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模块操作文件系统

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.异常


try:
    print("try执行前")
    print(1 / 0) # ZeroDivisionError
    # print('a' + 1)  # TypeError
    print("try执行后")
except Exception as e:
    print("异常处理代码",e)
else:
    print("没有异常")
finally:
    # 绝大多数使用场景:用来释放资源,例如:关闭文件、关闭数据库连接
    print("最终要执行的代码")

9.异常传递

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())

文章来源:https://blog.csdn.net/m0_49956154/article/details/135173185
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。