之前分享的关于 代码改变生活系列;
这次来写下 关于移动文件、复制文件的分享。
个人博客:https://blog.csdn.net/zyooooxie
移动文件 shutil.move()
需求来源于我的爬虫脚本:我下的视频很多,想做个分类【以时长为标准】,我要将其移动到 某些文件夹中(不同时长对应不同的文件夹)。
一个、两个文件夹,几百的数据量其实还好;几十个文件夹、几万数据量就有些麻烦了;用代码来实现下。
def move_file(path=r'E:\123456789'):
"""
某文件夹内(子目录及其)全部视频解析时长后 移动到对应文件夹
:param path: 某文件夹
:return:
"""
os.chdir(path)
for root, dirs, files in os.walk(path, topdown=False):
print(root)
print('len 为{}'.format(len(files)))
for f in files:
# 视频解析 获取其时长d
d = get_video_duration(f)
# 因为get_video_duration()对某file解析后,视频的时长有问题 OSError 将其移动到delete文件夹,返回None
if d is None:
continue
elif d <= 15:
# 因为get_video_duration()对某file解析后,视频的音频部分 AttributeError 将其移动到error文件夹
if os.path.exists(f):
shutil.move(f, os.path.join(r'G:\xiao_15', f))
elif 480 > d > 300: # 5-8分钟
if os.path.exists(f):
shutil.move(f, os.path.join(r'G:\da5_8', f))
elif 600 > d > 480:
if os.path.exists(f):
shutil.move(f, os.path.join(r'G:\da8_10', f))
elif 720 > d > 600:
if os.path.exists(f):
shutil.move(f, os.path.join(r'G:\da10_12', f))
elif d > 720:
if os.path.exists(f):
shutil.move(f, os.path.join(r'G:\da12', f))
else: # 常见的
if os.path.exists(f):
shutil.move(f, os.path.join(r'G:\down', f))
复制文件
def copy_file(path=r'D:\工作日报'):
"""
文件夹A中 符合某条件【格式为xlsx】的文件 全部复制到文件夹B
:param path:
:return:
"""
os.chdir(path)
# print(os.listdir(path))
file_list = [p for p in os.listdir(path) if os.path.isfile(p)]
xlsx_list = list(filter(lambda y: y.endswith('xlsx'), file_list))
for x in xlsx_list:
# 从src复制到dst中去(不包括元数据)。前提是目标地址是具备可写权限。如果您没有写入权限,则会引发IOError
# dst必须是一个文件
shutil.copyfile(x, os.path.join(r'D:\zyooooxie', x))
# # copy() 会拷贝文件数据和文件的权限模式
# # src必须是一个文件,dst可以是一个文件或者目录
# shutil.copy(x, r'D:\zyooooxie')
# shutil.copy(x, os.path.join(r'D:\zyooooxie', x))
#
# # copy2()会使用 copystat() 来拷贝文件元数据;
# # 在copy()的基础上再复制文件最后访问时间与修改时间
# shutil.copy2(x, r'D:\zyooooxie')
# shutil.copy2(x, os.path.join(r'D:\zyooooxie', x))
# 将以 src 为根起点的整个目录树拷贝到名为 dst 的目录并返回目标目录
# 目录的权限和时间会通过 copystat() 来拷贝,单个文件则会使用 copy2() 来拷贝
shutil.copytree(path, r'D:\zyooooxie\test')
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie