python文件操作

python文件操作

文件的读写mode

# w模式下,若文件不存在,文件光标跳到文件首个位置;则会先创建一个文件,且会先清空文件的内容再进行写入
​
# w模式下若文件存在,是再打开文件的第一件事(还没开始写)就先清空文件内容
​
# x模式,若文件不存在则创建文件,若文件存在则直接报错
​
# a模式下,若文件不存在,创建文件;若文件存在,文件光标直接跳转到文件内容的末尾

文件的read

# readline() 一次读取文件内的一行数据
​
# read() 一次把文件中的所有内容读取出来,加载到内存当中**
# read读取的数据,是字符串;有换行的`\n`,通常用split进行切割成列表**
​
# read(1024) 里面传的参数是一次读取多少字符,若是b模式下,就是一次读取1024个字节
# readlines() 一次把文件中的所有内容读取出来,加载到内容中(返回的是一个列表。列表中含有`\n的换行符`)
# ['啦啦\n', '小肥牛\n', '哈哈']

文件操作示例

with open(1.txt,encoding="utf-8") as f: # 默认是mode = "r"
    f.read()
# 当文件不存在的时候,FileNotFould
# 当文件存在的时候,文件里的光标定位到文件内容的第一个位置(也就是把文件内容(整个文件)全部加载到内存中了,如果件过大,就非常占内存)
​
with open(data.txt,mode="w",encoding="utf-8") as f:
    pass # "w"模式,覆盖写,
​
​
with open(data.txt,mode="a",encoding="utf-8") as f:
    pass # "a"模式,追加写,
# a模式下,若文件不存在,创建文件;若文件存在,文件光标直接跳转到文件内容的末尾
​

防止路径转义\r

# 防止文件路径转义
​
with open(fr"{path}",mode="a",encoding="utf-8") as f:
    pass

写入文件的时候换行(\n)

# 注册功能
​
# 扩展需求
# 判断用户输入的账号密码是否含有非法字符(*,空格,逗号等)
# 判断用户输入的账号密码是否存在
# 如果有提示已存在,如果没有提示用户注册成功
# 注册成功以后,实现登录的操作
username = input("请输入账号:>>>>>")
password = input("请输入密码:>>>>>")
​
with open("db_file.txt",mode="a",encoding="utf-8") as file:
​
    file.write(f"{username}----{password}\n") # 存入文件时候进行换行

 

文件的拷贝,以及一次读取多个文件

# 拷贝功能(目前是只能拷贝文本的,后面优化拷贝文件或者视频图片)
# 所谓拷贝,就是先读取原文件,然后再写入新文件
​
old_path = input("请输入文件路径:--->").strip()
new_path = input("要拷贝的文件路径:--->").strip()
​
with open(fr"{old_path}", mode="r",encoding="utf-8") as old_dile, \
        open(fr"{new_path}", mode="w", encoding="utf-8") as new_file:
​
    res = old_dile.read()
    new_res = new_file.write(res)
    
# bytes()类型,就是二进制字符,b开头的
​
# 读取文本,视频图片以及写入,wb,rb,因为读取的是二进制,所以一定不能指定encoding,
# 指定encoding就直接报错了,要用encode()
# rb下读取的是存入硬盘的二进制,比如存的时候是utf-8,那读取出来就是utf-8格式的二进制
# 所以此时通过python打印出来也是utf-8的二进制,所以要得到二进制对应的字符,
# 就要通过decoding("utf-8")解码
​
# b模式就是类似于搬运工,我们存入硬盘时是什么以什么格式的二进制存储的,读取出来也是一样的

 

wb模式下写入

with open("data.txt",mode="wb") as f:
    f.write("要写入的而二进制,比如图片,视频".encode('utf-8'))
# wb模式下,必须自己通过encode将要写入的转化成二进制,才能写入

控制文件指针移动

每个英文字符在utf-8里占一个字节,每个中文字符在utf-8里占三个字节

模式0:参照文件开头位置

模式1:参照当前文件指针所在的位置

模式2:参照当前文件指针末尾位置,这时候的就要传负数了

# 可以理解为光标,但并不是光标
# b模式下每次移动的单位是字节,t模式下每次移动的是字符个数
# seek()
​
with open("file_path",encoding="utf-8") as f:
    
    f.read(5) # 读五个字符(也就是五个中文)
    f.seek() # 第一个参数n是指针移动的字节数量,第二个参数是参照位置
    f.seek(5,0) # 文件指针以开头为参照,往后移动5个字节,这时候文件指针(光标)就停留在第5个字节的位置
    f.seek(2,0) # 文件指针以开头为参照,从第5个光标位置移动到第2个字节的位置
    f.seek(-5,2) # 文件指针在文件末尾处,向文件开头方向移动5个字节
    
# 通常注只有在b模式下,才会控制移动文件指针
f.teel() # 获取文件指针当前所在位置

## 统计文件中的字符

with open("1.txt",encoding="utf-8") as f:
    size = 0
    for line in f:
        size = size + len(line)
    print(size)
    
with open("1.txt",encoding="utf-8") as f:
    sum([len(line) for line in f]) # 使用列表生成式

字符串居中

print("要居中的符号".center(80,'-'))
-------------------------------------要居中的符号-------------------------------------

格式化保留小数位

# 最后一位小数会四舍五入
print("{:.2f}".format(10.2867)) # 保留两位小数,最后一位小数,四舍五入
# 字符串只能做乘运算,其他加、减、除运算不能做
posted @ 2022-08-06 11:25  无敌大牛牛  阅读(33)  评论(0编辑  收藏  举报