Python批处理:文件操作

一、为什么要使用python处理文件

文件处理管理可分为两种,一种是可视化、手动化,学习成本低,处理数量有限。另一种是编程化、自动化,有一定学习成本,可以基于逻辑处理。计算机的常项是对既定规则的发挥,这个发挥作用于"批量"这个层面。

二、相对路径与绝对路径

相对路径:被操作的文件相对你当前运行的程序来说的路径叫相对路径。

绝对路径:文件在计算机绝对的路径或者说位置叫做绝对路径。

 三、python处理文件的常用命令

python文件处理的三个常用库:

1
2
3
import os  #查、改
import shutil #复制、剪切
import zipfile #打包、压缩 

os的常用方法,path路径系列

1
2
3
4
5
6
7
os.path.abspath(参数)       #获取当前文件的绝对路径 c:/project/X/XXX.txt
os.path.isdir(参数)             #获取当前路径文件是否为文件夹-布尔
os.path.isfile(参数)             #获取当前路径文件是否为文件-布尔
os.path.basename(参数)    #获取当前路径的结尾名字 c:/project/xxx.txt
os.path.split(参数)             #以路径文件名切分列表['c:/project/','xxx.txt']
os.path.join(参数)              #(‘aa’,'bb','x.txt')aa/bb/x.txt
os.path.getsize(参数)         #以字节单位(B)返回当前文件大小换算KB除以1024 换算MB再除以1024

输出压缩文件的绝对路径

1
2
3
import os
 
print(os.path.abspath('abc.zip'))

 

输出结果:

判断一个路径是否是目录

1
2
3
import os
 
print(os.path.isdir('abc.zip'))

 

输出结果:

1
2
3
import os
 
print(os.path.isdir('D:\PythonProject\Python_001\pythonProject'))

 

输出结果: 

判断是否为文件

1
2
3
import os
 
print(os.path.isfile('abc.zip'))

输出结果:

 输出文件名

注意windows下的路径间隔符号刚好是python的转译

1
2
3
import os
 
print(os.path.basename('D:\\PythonProject\\Python_001\\pythonProject\\abc.zip'))

 

输出结果:

 切分路径与文件名

1
2
3
import os
 
print(os.path.split('D:\\PythonProject\\Python_001\\pythonProject\\abc.zip'))

 

输出结果:

连接文件路径

1
2
3
import os
 
print(os.path.join('D:\\','PythonProject\\Python_001\\pythonProject','abc.zip'))

 输出结果:

获取文件大小

1
2
3
import os
 
print(os.path.getsize('abc.zip')/1024/1024) #B/1024=KB/1024=MB

 输出结果:

os常用的方法(读、改、查系列) 

1
2
3
4
5
6
os.getcwd()                    #获取当前工作绝对路径  c:/project/X/
os.listdir(参数)                 #获取当前路径下所有文件/文件夹
os.remove(参数)              #删除文件(注意不是目录)
os.removedirs(参数)         #删除多级目录,目录必须要为空(注意!从底层往上层全部删除)
os.rmdir(参数)                  #删除一个目录,目录必须要为空
os.mkdir/makedirs(参数)  #创建一级或多级目录,这里s是多级

获取当前的工作路径

1
2
3
import os
 
print(os.getcwd())

输出结果:

获取当前路径下所有文件/文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
 
pwd=os.getcwd()
abs_path=os.path.abspath('tmp\\file200')
print(abs_path)
for f in os.listdir(abs_path):
    print(f)
    files=os.getcwd()+"\\"+f
    print(files)
    print(os.path.isdir(files))
    if os.path.isdir(files)==True:
        for file in os.listdir(files):
            print(os.path.isdir(file))

输出结果:

删除文件

1
2
3
4
5
import os
 
path=os.getcwd()
print(path)
os.remove(f'{path}\\tmp\\file200\\1.txt')

输出结果:

删除前:

删除后:

 再次删除:

 文件不存在,所以报错了

删除目录

1
2
3
4
5
import os
 
path=os.getcwd()
print(path)
os.rmdir(f'{path}\\testdirectory')
1
rmdir必须删除的是空目录,如果目录非空,会报错误运行结果:删除前

删除后:

 如果目录非空状态会报错

删除多级目录

1
2
3
4
5
import os
 
path=os.getcwd()
print(path)
os.removedirs('fileremove/2/3/4')

 运行结果:

 如果存在底层存在平级目录不为空,上级目录不删

创建单级新目录

1
2
3
4
5
import os
 
path=os.getcwd()
print(path)
os.mkdir('myfolder')

运行结果:

运行前:

 运行后:

创建多级新目录

1
2
3
4
5
import os
 
path=os.getcwd()
print(path)
os.makedirs('myfolder1//myfolder2//myfolder3')

运行结果:

运行前:

运行后:

shutil下,常用方法(复制、剪切系列)

1
2
3
4
shutil.rmtree(文件夹)                      #删除路径下的所有文件、目录,无论是否有文件(特别注意这个跟os.remove rmdir removedirs的区别)
shutil.copytree(源目录,目标目录)     #文件夹全量(包含下属所有层次)复制
shutil.copy(源文件,目标文件)           #文件复制
shutil.move(源文件夹,目标文件夹)    #文件夹/文件剪切

删除文件夹

1
2
3
import shutil
 
shutil.rmtree('file_shutil_1')

运行结果:

运行前:

 运行后:

文件夹全量(包含下属所有层次)复制

1
2
3
import shutil
 
shutil.copytree('file_shutil_1','new_file_shutil_1') 

运行结果:

运行前:

运行后:

 全量复制了一份

文件复制

1
2
3
import shutil
 
shutil.copy('D:/PythonProject/Python_001/pythonProject/file_shutil_1/3/2/1/1.txt','D:/PythonProject/Python_001/pythonProject/file_shutil_1/3/2/1/2.txt')

运行结果:

运行前:

 运行后:

 

文件剪切

1
2
3
import shutil
 
shutil.move('D:/PythonProject/Python_001/pythonProject/file_shutil_1/3/2/1/1.txt','D:/PythonProject/Python_001/pythonProject/new_file_shutil_1/3/2/1/1.txt')

运行结果:

运行前:

 运行后:

 

使用zipfile完成压缩和解压 

压缩文件

1
2
3
4
5
6
7
8
9
import os
import zipfile
 
# 建立一个压缩写入对象
z=zipfile.ZipFile('abc.zip','w')# 遍历目录,然后文件一个一个写入对象,zip文件
for x in os.listdir('file200'):
#具体向压缩包写入操作
    z.write('file200'+os.sep+x)
z.close()

程序结果运行如下:

上下文管理器

1
2
3
4
5
6
import os
import zipfile
 
with zipfile.ZipFile('abc.zip','w') as w:
    for x in os.listdir('file_shutil_1'):
        w.write('file_shutil_1'+os.sep+x)

运行结果如下:

运行前

运行后:

解压文件

1
2
3
4
5
6
7
import zipfile
 
# 建立一个压缩写入对象
z=zipfile.ZipFile('abc.zip','r')
for file in z.namelist():
#具体向压缩包写入操作
    z.extract(file,"tmp/")

程序结果运行如下:

读取文件内容

1
2
3
4
5
import os
 
txt = open('D:/PythonProject/Python_001/pythonProject/new_file_shutil_1/3/2/1/1.txt', mode='r',encoding='utf-8')
print(txt.readlines())
txt.close()

运行结果如下:

更换写法

1
2
3
4
import os
 
with open('D:/PythonProject/Python_001/pythonProject/new_file_shutil_1/3/2/1/1.txt', mode='r',encoding='utf-8') as r:
    print(r.readlines())

 写入文件内容

1
2
3
4
import os
 
with open('D:/PythonProject/Python_001/pythonProject/new_file_shutil_1/3/2/1/1.txt','w') as w:
    print(w.write('Helloworld'))

运行结果如下:

运行前

运行后

 在文件内添加内容

1
2
3
4
import os
 
with open('D:/PythonProject/Python_001/pythonProject/new_file_shutil_1/3/2/1/1.txt','a',encoding='utf-8') as add:
    print(add.write('Helloworld'))

 运行结果如下:

运行前:

运行后:

用Python清理你的大文件

过程描述

从电脑找出你的大文件,然后放在一个文件夹下,然后进行压缩保存

要求:

1、使用os shutil和zipfile完成该任务

2、要求对文件进行判断,大于100MB(兆)

3、满足文件大小,然后复制文件到统一目录下

4、把该目录下的文件进行zip压缩保存

 

  

 

  

posted @   leagueandlegends  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示