[Python自动化办公]03批量操作文件和文件夹

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环境下运行检验,如有不足欢迎评论交流。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值