目录
1.写入和读取文件
1.1 读取
open()打开文件,'r’代表读取,encoding='utf-8’代表以utf-8编码读取
readlines()逐行读取进去
cloes()关闭文件,注意:操作文件最后一定要关闭
f = open('test.txt', 'r', encoding='utf-8')
text = f.readlines()
print(text)
f.close()
推荐:with…as… 替代open(),close(),运行后自行关闭文件
with open('test.txt', 'r', encoding='utf-8') as f:
text = f.readlines()
print(text)
1.2 写入
write()
with open('test.txt', 'w', encoding='utf-8') as f:
text = 'test\ntest1\n'
f.write(text)
f.write('test2')
注意:若无该文件,会直接创建
'w’表示写入文件,直接覆盖
'a’表示写入文件,原有内容后继续写入
2.创建临时文件(夹)存储数据
2.1 临时文件
TemporaryFile()
from tempfile import TemporaryFile
f = TemporaryFile('w+')
f.write('test')
f.seek(0)
data = f.readlines()
print(data)
f.close()
'w+'表示写入及读取文件
.seek(0)表示回到文件开头位置
临时文件在程序运行完毕后自动删除
2.2 临时文件夹
TemporaryDirectory()
from tempfile import TemporaryDirectory
with TemporaryDirectory() as tmp_folder:
print(tmp_folder)
PS:临时文件和文件夹的使用相对较少,在此作以了解
3.操作文件(夹)
3.1 创建
3.1.1 单个文件夹
os.mkdir()
import os
os.mkdir('new_test')
当文件夹已存在时,会报错FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。
推荐:通过os.path.exists()检查不存在创建文件夹后再执行创建命令
import os
if not os.path.exists('new_test'):
os.mkdir('new_test')
3.1.2 多级文件夹
os.makedirs()
import os
os.makedirs('new_test\\test1\\test2')
当创建最里层文件夹已存在,则报错
3.2 复制
3.2.1 文件
shutil.copy()
import shutil
# 第二个参数为文件夹位置,则复制到该文件夹下
shutil.copy('test.txt', 'test')
# 第二个参数为文件路径,则复制并重命名
shutil.copy('test.txt', 'test\\test_copy.txt')
3.2.2 文件夹
shutil.copytree()
import shutil
shutil.copytree('test', 'test_new')
注意:新文件夹不能已经存在
3.2 移动文件(夹)
shutil.move()
import shutil
# 第二参数是文件路径,则移动并重命名
shutil.move('test.txt', 'test\\test_shutil.txt')
# 第二参数是文件夹位置,则移动
shutil.move('test.txt', 'test')
# 移动文件夹,如果path存在目标文件夹,则直接移动至path下一级,不存在则移动并重命名得到path
shutil.move('new_test', path)
注意:移动文件夹,path是否存在,影响移动位置的不同(存在,下一级;不存在,等同重命名)
3.3 重命名
os.rename()
import os
os.rename('test.txt', 'test_rename.txt')
注意:重命名的新文件不能存在,否则报错[WinError 183],建议重命名前使用os.path.exists()进行检查
3.4 删除
3.4.1 文件
os.remove()
import os
os.remove('test.txt')
注意:该方法只能删除文件,且删除后无法恢复
3.4.2 文件夹
shutil.rmtree()
import shutil
shutil.rmtree('test')
注意:删除为彻底删除,无法在回收站恢复
4.实战: 分类备份文件
要求:
1.找出当前目录下所有ZIP压缩包文件
2.将文件重命名:原文件名前加上最后修改日期
3.创建新文件夹backup
4.文件移动到backup文件夹备份
4.1 学习版
import glob
import os
import datetime
import shutil
# 检查是否存在文件夹backup,不存在则创建
if not os.path.exists('backup'):
os.mkdir('backup')
# 遍历当前目录下的所有压缩包
for file in glob.glob('*.zip'):
# 获取文件修改时间,并转换格式2020-03-31 23:57:26.583729
file_time = datetime.datetime.fromtimestamp(os.stat(file).st_mtime)
# 文件时间转字符串并获取前九个字符,加上原文件名
file_newname = str(file_time)[0:10] + '-' + file
# 利用os.rename()进行重命名
os.rename(file, file_newname)
# 利用shutil.move()移动重命名后的文件到backup文件夹
shutil.move(file_newname, 'backup\\')
4.2 衍生: 通用版
import os
import datetime
import shutil
import fnmatch
def sort_backup(fpath, sname, tpath):
# 检查是否存在文件夹backup,不存在则创建
if not os.path.exists(tpath):
os.mkdir(tpath)
# 遍历目录
for dirpath, dirnames, files in os.walk(fpath):
# 防止遍历备份文件夹进入死循环
if not dirpath == tpath:
# 获取文件
for file in files:
# 匹配类型
if fnmatch.fnmatch(file, '*.'+sname):
# 获取文件修改时间,并转换格式2020-03-31 23:57:26.583729
file_time = datetime.datetime.fromtimestamp(os.stat(os.path.join(dirpath, file)).st_mtime)
# 文件时间转字符串并获取前九个字符,加上原文件名
new_name = str(file_time)[0:10] + '-' + file
# 改变工作路径到当前遍历文件夹,才可进行rename
os.chdir(dirpath)
# 利用os.rename()进行重命名
os.rename(file, new_name)
# 利用shutil.move()移动重命名后的文件到backup文件夹
shutil.move(new_name, tpath)
if __name__ == "__main__":
fpath = input('输入路径:')
sname = input('筛选类型:')
tpath = input('备份路径:')
sort_backup(fpath, sname, tpath)
5.拓展知识
os.chdir() 用于改变当前工作目录到指定的路径
import os
path = "D:\\PyProject\\Test\\backup"
# 查看当前工作目录
retval = os.getcwd()
print("当前工作目录为{}".format(retval))
# 修改当前工作目录
os.chdir(path)
# 查看修改后的工作目录
retval = os.getcwd()
print("目录修改成功{}".format(retval))
当前工作目录为D:\PyProject\Test
目录修改成功D:\PyProject\Test\backup
说明:在通用版中为准确定位进行os.rename重命名,需要在执行rename()前进行工作路径的更改,否则报错:FileNotFoundError:[WinError 2]系统找不到指定的文件。
PS:代码均基于Python3.7环境下运行检验,如有不足欢迎评论交流。