输入和输出
文件
文件路径
绝对路径
# linux
file_path = "~/home/30_python/test.txt"
# windows
file_path = "D:/30_python/test.txt"
# 使用转义字符
file_path = "D:\\python\\test.txt"
# 使用 r 参数, 无需使用转移字符
file_path = r"D:\python\test.txt"
相对路径
# 同目录下 test.txt 文件
file_path = "test.txt"
# 同目录下 test 文件夹中 test.txt 文件
file_path = "./test/test.txt"
# 上级目录下 test.txt 文件
file_path = "../test.txt"
# 上上级目录下 test.txt 文件
file_path = "../../test.txt"
打开并加载文件
open ()函数
- open(file,mode,encoding=None);
- 打开并加载文件;
- 若文件不存在,自动生成;
- file:文件路径;
- mode:文件模式;
- 'r':只读 (默认模式);
- 'w':只写;
- 'a':添加。
- encoding:文件编码。
- utf-8。
- 返回值:file_object。
file_object.close() 方法
- file_object.close();
- 释放 file_object;
- 返回值:无。
# 原始方法
# 不足, suite 语句若出现错误, file_object.close() 方法无法执行, 无法释放 file_object
file_object = open(file, mode)
file.write('hello world !'
file.close()
# 利用 try...except...finally 改进, file_object.close() 方法始终执行
file_object = open(file, mode)
try:
file.write('hello world !')
except IOError:
pass
finally:
file_object.close()
# 对上述方法的封装
# open() 返回值赋予 file_object
# 离开 with 块时, 自动执行 file_object.close() 方法
with open(file, mode) as file_object:
file.write('hello world !')
注意
换行符
- 读文件:包括换行符;
- 写文件。
- 不自动添加,
- 手动输入。
文件模式区别
- r:只读;
- w:只写,覆写文件内容;
- a:只写,文件已有内容后添加。
读文件
文件模式
- r。
file_object.read() 方法
- file_object.read(size);
- 读整个文件;
- size:读取字节个数,默认为 -1 即整个文件
- 返回值:读取字节。
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
file_object.readline() 方法
- file_object.readline(size);
- 读取整行;
- size:读取字节个数,默认整行。
- 返回值:读取字节。
with open(filename) as file_object:
# 读取第一行
line_1 = file_object.readline()
# 读取第二行
line_2 = file_object.readline()
file_object.readlines() 方法
- file_object.readlines();
- 读取所有行并存储至列表;
- 返回值:列表。
with open(filename) as file_object:
lines = file_object.readlines()
for 循环实现 file_object.readlines() 方法
lines = []
with open(filename) as file_object:
for line in file_object:
lines.append(line)
写文件
文件模式
- w;
- a。
file_object.write() 方法
- file_object.write(str);
- 写文件;
- str:写入字符串;
- 返回值:字符串长度。
# 覆写文件
with open(filename, 'w') as file_object:
# 写入文件第一行
file_object.write("I love programming.\n")
# 写入文件第二行
file_object.write("I love creating new games.\n")
# 已有文件添加
with open(filename, 'a') as file_object:
# 已有文件后添加内容
file_object.write("I love programming.\n")
file_object.write("I love creating new games.\n")
储存数据
json
引入 json 模块
import json
写 json 文件
json.dump() 方法
- json.dump(data,file_object);
- 写 json 文件,
- data:存储数据;
- file_object:储存文件。
>>> import json
>>> data = 'kxh'
>>> print(data)
kxh
>>> print(json.dumps(data))
"kxh"
>>>
json.dumps() 方法
- json.dumps(data);
- 转换为 json 字符串,
- 在 data 外加 '' (不是 ""),使其变成字符串,
- data:存储数据;
- 返回值:str。
读 json 文件
json.load() 方法
- json.load(file_object);
- 读 json 文件,json.dump() 的反过程
- file_object:读取文件;
- 返回值:json 文件内容。
json.loads() 方法
- json.loads(data);
- 读 json 字符串,
- 去除 data 外的 ''
- data:解码数据,类型为 str;
- 返回值:json 字符串解码内容。
>>> import json
>>> data = '"kxh"'
>>> print(data)
"kxh"
>>> print(json.loads(data))
kxh
>>>
常用 API
os 模块
os
- os.getcwd() -> str:返回当前所在目录路径;
- os.walk(path,topdown=True) -> tuple[list]:根据 topdown 遍历 path 路径下的所有文件/文件夹;
- os.listdir(path) -> list[str]:返回 path 路径下的文件和文件夹名;
- os.getcwd() -> str:返回当前所在目录路径;
- os.getcwd() -> str:返回当前所在目录路径;
os.path
操作文件
- os.path.exists(path) -> boolean:判断 path 对应文件/文件夹是否存在;
- os.path.join(path,*paths) -> str:链接 path 和 paths 两个路径
os.mkdir() 方法
- os.mkdir(path)。
- 根据 path 创建文件夹。
- path:文件夹路径;
- 报错。
- FileExistError:文件夹已存在;
- FileNotFoundError:不存在父文件夹。
os.mkdirs() 方法
- os.makedirs(path)。
- 根据 path 创建一系列文件夹。
- path:文件路径。
- 报错。
- FileExistError:文件夹已存在;
os.remove() 方法`
- os.remove(path)。
- 删除 path 对应的文件。
- 报错。
- FileNotFoundError:不存在文件;
- IsADirectoryError:path 对象为文件夹。
os.rmdir() 方法
- os.rmdir(path)。
- 删除 path 对应的空文件夹。
- 报错。
- FileNotFoundError:不存在文件夹;
- OSError:path 对象为非空文件夹。
shutil 模块
shutil
- shutil.copyfile(src,dst) -> dst:将 src 路径的文件复制到 dst 路径下;
- shutil.copy(src,dst) -> dst:将 src 路径的文件/文件夹复制到 dst 路径下;
- shutil.copytree(src,dst) -> dst:将 src 路径的整个文件树复制到 dst 路径下;
- shutil.rmtree(path) -> None:删除 path 路径下的整个文件树;