open 读写文件
读取文件
- filename: 被读取的文件名
- mode: 读取模式
- encoding: 编码
python
# 打开文件
file_handle = open("./readme.md", "r", encoding="utf-8")
# 是否可读: 返回一个布尔值
if file_handle.readable():
# 按照字节读取内容: 返回一个字符串
print("读取 10 个字节:", file_handle.read(10))
print("读取所有内容:", file_handle.read())
# 是否允许在任何位置开始读取
if file_handle.seekable():
# 将读取指针放到最开始的位置
file_handle.seek(0)
# 按行读取内容, 返回一个 字符串列表, 一行就是一个元素
contents = file_handle.readlines(1)
print("读取一行:", contents)
contents = file_handle.readlines()
print("读取所有行:", contents)
print("---" * 10)
if file_handle.seekable():
file_handle.seek(0)
# 循环读取文件内容
i = 0
for line in file_handle:
i+=1
print(f"第 {i} 行的数据是:{line}")
# 关闭资源句柄
file_handle.close()
with 关键字
使用 with 关键字可以自动关闭
py
# 自动关闭资源句柄
with open("./readme.md", "r", encoding="utf-8") as f1:
print(f1.read())
### 等同于 ###
f1 = open("./readme.md", "r", encoding="utf-8")
print(f1.read())
f1.close()
写入文件
python
# 覆盖文件内容
with open("./readme.md", "w", encoding="utf-8") as f1:
if f1.writable():
f1.write("---overwrite---")
# 追加文件内容
with open("./readme.md", "a", encoding="utf-8") as f2:
if f2.writable():
f2.write("---append---")
操作系统模块
- os: 操作系统交互模块
- shutil: shell交互模块
文件
创建
python
import os
# 创建单个目录类似
os.mkdir("./dir1")
# 创建多级目录
os.makedirs("./dir1/dir2")
# 创建文件并写入内容
with open("./1.txt", "w") as fd:
fd.write("11111111111")
删除
python
import os
import shutil
# 删除文件
os.unlink("./1.txt")
# 删除目录(只能删除空的)
os.rmdir("./demo1")
# 可以删除非空的目录及其子目录
shutil.rmtree("./demo1")
复制
python
import shutil
# 复制文件
shutil.copyfile("./1.txt", "./demo1/1.txt")
# 复制目录
shutil.copytree("./demo1/", "./demo2")
移动(重命名)
python
# 移动文件/目录
os.rename("./1.txt", "./demo1/new1.txt")
# 重命名文件/目录
os.rename("./demo2", "./demo1/demo2")
文件路径
查看
python
import os
# 0. 先创建一些目录和文件
os.makedirs("./dir1/dir2")
with open("./dir1/hello.txt" , "w") as f:
f.write("hello")
# 1.查看目录下的所有文件和目录
files = os.listdir("./dir1")
print(files) # ['dir2', 'hello.txt']
# 2.查看目录下的所有文件和目录
with os.scandir("./dir1") as it:
for entry in it:
if entry.is_file():
print("文件: %s" % entry.name)
else:
print("目录: %s" % entry.name)
判断
python
import os
# 文件/目录是否存在
if(os.path.exists("./1.txt") or os.path.exists("./demo1")):
print("文件存在")
# 是否是文件
if(os.path.isfile("./1.txt")):
print("是文件")
# 是否是目录
if(os.path.isdir("./demo1")):
print("是目录")
# 判断路径是否是绝对路径
file_path = "./demo/hello.txt"
if(os.path.isabs(file_path)):
print("是绝对路径")
else:
print("不是绝对路径")
信息获取
python
import os
file_path = "./demo/hello.txt"
# 分离路径总的目录名和文件名部分
dir, file = os.path.split(file_path)
print(dir, file) # ./demo hello.txt
# 分离路径的文件名部分和扩展名部分
fpath, ext = os.path.splitext(file_path)
print(fpath, ext) # ./demo/hello .txt
# 获取目录明
print(os.path.dirname(file_path)) # ./demo
# 获取文件名
print(os.path.basename(file_path)) # hello.txt
# 获取当前脚本的工作目录
print(os.getcwd()) # /Users/secret/Desktop/python_code
系统相关
python
import os
# 执行系统命令
os.system("ls")
# 读取和设置环境变量
# os.getenv()
# os.putenv()
# 产量: 系统换行符
# window: \r\n
# linux/mac: \n
print(f"1{os.linesep}2")