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())
相关推荐
AttackingLin1 分钟前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪40815 分钟前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Ysjt | 深36 分钟前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++
ephemerals__42 分钟前
【c++丨STL】list模拟实现(附源码)
开发语言·c++·list
码农飞飞1 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货1 小时前
Rust 的简介
开发语言·后端·rust
湫ccc1 小时前
《Python基础》之基本数据类型
开发语言·python
Matlab精灵1 小时前
Matlab函数中的隐马尔可夫模型
开发语言·matlab·统计学习
Microsoft Word1 小时前
c++基础语法
开发语言·c++·算法