读写文件
1 | with open('data1.txt', mode='w', encoding="utf-8") as f: |
- 打开多个文件
1
2
3with open("file_test","r",encoding="utf-8") as f, \
open("file_test2","r",encoding="utf-8") as f2:
...
flush方法
1 | f = open("file_test","w",encoding="utf-8") |
- 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。
- flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。
- 正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。
- 至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。
- 如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。
- 但有时你需要在关闭前刷新到硬盘中,这时就可以使用 flush() 方法
操作文件夹
- 判断路径或文件
1 | os.path.isabs(...) # 判断是否绝对路径 |
- 工作目录及创建文件夹操作
1
2
3
4
5os.getcwd() # 获取当前工作目录 等同于os.path.dirname(__file__)
os.chdir(".\\test_mkdir") # 改变工作目录,. 表示本级目录; .. 表示上级目录
os.listdir(...) # 列出目录下的文件
os.mkdir(...) # 创建单个目录
os.makedirs(...) # 创建多级目 - 删除文件夹、文件
1
2
3os.rmdir(...) # 删除空文件夹
os.remove(...) # 删除单一文件
shutil.rmtree(...) # 删除文件夹及其下所有文 - 重命名文件夹/文件
1
os.rename(oldfileName, newFilename)
- 复制文件/文件夹
1
2
3
4shutil.copyfile("old","new") # 复制文件,都只能是文件
shutil.copytree("old","new") # 复制文件夹,都只能是目录,且new必须不存在
shutil.copy("old","new") # 复制文件/文件夹。经过测试,直接复制文件夹,报权限问题;直接复制文件正常
shutil.move("old","new") # 移动文件/文件夹至 new 文件夹中
实例
进入到相对文件目录
1 | # os.path.dirname(__file__) 表示得到当前目录路径等同于os.getcwd() |
引用公共模块
- 在不同的项目中,需要引用到当前项目的公用方法
1
2
3
4
5
6
7# 得到当前文件绝对路径
abs_path = os.path.abspath(os.path.dirname(__file__))
# 得到公共用例目录,采用切割项目名的方法
common_path = os.path.join(abs_path.split("airtest_auto")[0], "airtest_auto", "util")
# 导入到公用目录
sys.path.append(common_path)
from app_util import *
得到目录下的所有文件和文件夹
1 | for root, dirs, files in os.walk("t3", topdown=False): |
得到文件夹下的某些文件
1 | for i in os.listdir("t1"): |
得到文件夹下的修改时间排序的文件
1 | # 得到父目录的绝对路径 |