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())
相关推荐
逆水寻舟8 分钟前
算法学习记录2
python·学习·算法
Mr_Richard17 分钟前
Java动态代理的实现方式
java·开发语言
B站计算机毕业设计超人44 分钟前
计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
大数据·python·深度学习·机器学习·数据分析·课程设计·推荐算法
码农超哥同学1 小时前
Python面试题:请解释 `lambda` 函数是什么,并举一个例子
开发语言·python·面试·编程
sssjjww1 小时前
python输出日志out.log相关问题(缓存机制)
java·python·缓存
Uluoyu1 小时前
python爬虫爬取中国国际招标有限公司
开发语言·爬虫·python
LL小蜗牛1 小时前
Java对象通用比对工具
java·开发语言
☆致夏☆1 小时前
Java-反射
java·开发语言
akthwyl1 小时前
2024年【安全员-C证】考试及安全员-C证免费试题
c语言·开发语言
鸽鸽程序猿1 小时前
【数据结构】顺序表
java·开发语言·数据结构·学习·算法·intellij idea