源码
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None,
closefd=True): # known special case of open
Open file and return a stream. Raise OSError upon failure.
说明
"""
打开文件并返回一个流。失败时引发 OSError
"""
参数
"""
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用 utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的 file 参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
mode常见参数:
b 二进制模式。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
一般用a+,追加文本内容
"""
file 对象
"""
file.close()
关闭文件。关闭后文件不能再进行读写操作。
file.readline([size])
读取整行,包括 "\n" 字符。
file.readlines([sizeint])
读取所有行并返回列表,若给定 sizeint>0,返回总和大约为 sizeint 字节的行,实际读取值可能比 sizeint 较大,因为需要填充缓冲区。
file.write(str)
将字符串写入文件,返回的是写入的字符长度。
"""
举例
'文本内容存储到列表中'
li = []
with open("xxx.txt", "a+", encoding="utf-8") as file:
for line in file.readlines():
line = line.strip()
li.append(line)
复制文件和文件夹
import os
import shutil
'os.chdir()将当前工作目录更改为指定路径。'
'可以理解为os.changedir()路径可以始终指定为字符串。'
'在某些平台上,路径也可以指定为打开的文件描述符。'
'如果此功能不可用,则使用它会引发异常'
os.chdir("C:\\")
复制到某目录下(默认保留源文件名)
shutil.copy(r'D:\\源文件夹\\源文件.png', r'D:\复制后文件夹')
'这里如果是不同的操作系统,则可以是使用os.sep去区分分隔符在加上f-string格式化'
shutil.copy(f'D:{os.sep}源文件夹{os.sep}源文件.png', f'D:{os.sep}复制后文件夹')
复制到某目录下(修改源文件名)
shutil.copy(r'D:\\源文件夹\\源文件.png', r'D:\复制后文件夹\复制后文件名.png')
shutil.copy(r'D:\\源文件夹\\源文件.png', r'D:\复制后文件夹\复制后文件名.jpg')
复制文件夹
shutil.copytree(r'D:\\源文件夹', r'D:\复制后文件夹')
移动文件和文件夹
# shutil.move () 可以将文件或目录移到另一个目录中
shutil.mover('D:\\源文件夹', r'D:\\复制后文件夹')
'后面不带分割符为文件夹,后面带分隔符一般会有文件'
重命名文件和文件夹
"source"
os.rename(src="", dst="", src_dir_fd="", dst_dir_fd="")
os.rename("a.txt,b.txt")
os.rename("源文件夹", "新的源文件夹")
序列化和反序列化
'通过文件操作,我们可以将字符串写入到一个本地文件。'
'但是,如果是一个对象 (例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。'
"""
序列化:将数据从内存持久化保存到硬盘的过程。
反序列化:将数据从硬盘加载到内存的过程。
python 里存入数据只支持存入字符串和二进制。
json: 将 Python 里的数据 (str/list/tuple/dict) 等转换成为对应的 json。
pickle: 将 Python 里任意的对象转换成为二进制。
Python 中提供了 JSON 和 pickle 两个模块用来实现数据的序列化和反序列化。
"""
JSON 序列化
'存储到文件用dump,转储'
import json
file = open('names.txt', 'w')
names = ['小A', '吃饭']
# file.write(names) 出错,不能直接将列表写入到文件里
# 可以调用 json的dumps方法,传入一个对象参数
result = json.dumps(names)
# dumps 方法得到的结果是一个字符串
print(type(result)) # <class 'str'>
# 可以将字符串写入到文件里
file.write(result)
file.close()
JSON实现反序列化
'区别loads和load'
import json
# 调用loads方法,传入一个字符串,可以将这个字符串加载成为Python对象
result = json.loads("['小A', '吃饭']")
print(type(result)) # <class 'list'>
import json
# 以可读方式打开一个文件
file = open('names.txt', 'r')
# 调用load方法,将文件里的内容加载成为一个Python对象
result = json.load(file)
print(result)
file.close() # ['小A', '吃饭']
pickle 模块
‘和 json 模块类似,pickle 模块也有 dump 和 dumps 方法可以对数据进行序列化,同时也有 load 和 loads 方法进行反序列化。’
‘区别在于,json 模块是将对象转换成为字符串,而 pickle 模块是将对象转换成为二进制。’
‘pickle 模块里方法的使用和 json 里方法的使用大致相同,需要注意的是,pickle 是将对象转换成为二进制,’
‘所以,如果想要把内容写入到文件里,这个文件必须要以二进制的形式打开。’
pickle 序列化
"dumps 方法将 Python 数据转换成为二进制"
import pickle
names = ['小A', '吃饭']
b_names = pickle.dumps(names)
file = open('names.txt', 'wb')
file.write(b_names) # 写入的是二进制,不是存文本
file.close()
"dump 方法将 Python 数据转换成为二进制,同时保存到指定文件"
import pickle
names = ['小A', '吃饭']
file2 = open('names.txt', 'wb')
pickle.dump(names, file2)
file2.close()
pickle模块实现反序列号
'loads 方法,将二进制加载成为 Python 数据'
import pickle
file1 = open('names.txt', 'rb')
x = file1.read()
y = pickle.loads(x)
print(y)
file1.close()
'load 方法,读取文件,并将文件的二进制内容加载成为 Python 数据'
import pickle
file3 = open('names.txt', 'rb')
z = pickle.load(file3)
print(z)
'参考:-->https://blog.csdn.net/python2021_/article/details/124793497'
说明
"""
--json'序列化'
dumps 方法的作用是把对象转换成为字符串,它本身不具备将数据写入到文件的功能。
dump 方法可以在将对象转换成为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件里
--json'反序列化'
loads 调用loads方法,传入一个字符串,可以将这个字符串加载成为Python对象
load 调用load方法,将文件里的内容加载成为一个Python对象
--pickle'序列化'
dumps 方法将 Python 数据转换成为二进制
dump 方法将 Python 数据转换成为二进制,同时保存到指定文件
--pickle'反序列化'
loads 方法,将二进制加载成为 Python 数据
load 方法,读取文件,并将文件的二进制内容加载成为 Python 数据
-- 带s的不参与文件操作
-- 不到s的参与文件操作
-- 序列化 dump (存储)
-- 反序列化 load (读取)
"""