python文件的基本操作_「Python」 - 文件基本操作

以下练习,文件名、函数名、变量名有许多不规范的地方,但是也是练习python脚本,就不修正了,在Linux环境上都能成功执行。

小标题不足以代表脚本功能,具体参看描述,有一些也没有按照要求写在,主要是自己练习。

一、模糊搜索文件

下载并解压文件素材压缩包

https://video.mugglecode.com/files.zip

使用Python筛选出符合特征的文件:

1.除了gif类型之外的其他类型

2.名字中包含有关键词project30或者commercial

Python实现。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import requests

import os

import zipfile

import shutil

file_url = 'https://video.mugglecode.com/files.zip'

file_name = 'files.zip'

files_path = r'./files'

# 根据url下载文件

r = requests.get(file_url)

with open(file_name, 'wb') as code:

code.write(r.content)

# 解压zip文件

f = zipfile.ZipFile(file_name, 'r')

for file in f.namelist():

f.extract(file, './')

# 会把目录下所有文件和文件夹名存入列表

files = os.listdir(files_path)

for file in files:

if not file.endswith('.gif') and (file.find('project30') != -1 or file.find('commercial') != -1):

print(file)

os.remove(file_name)

shutil.rmtree(files_path)

二、文件按后缀归类

下载并解压件素材压缩包

https://video.mugglecode.com/script_project1_files.zip

根据后缀名,将相同后缀名文件,分类到该后缀名目录中

Python实现。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os

import shutil

path = './files/'

files = os.listdir(path)

for file in files:

suffix = file.split('.')[-1]

if not os.path.lexists(path + suffix):

os.mkdir(path + suffix)

shutil.move(path + file, path + suffix)

三、文件归类

下载并解压件素材压缩包

https://video.mugglecode.com/problem2_files.zip

使用Python进行如下操作:

1. 把jpg、png、gif文件夹中的所有文件移动到image文件夹中,然后删除jpg、png、gif文件夹

2. 把doc、docx、md、ppt文件夹中的所有文件移动到document文件夹中,然后删除doc、docx、md、ppt文件夹

Python实现。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os

import shutil

path = './files/'

dst_dirs = ('image', 'document')

src_martix = (('jpg', 'png', 'gif'), ('doc', 'docx', 'md', 'ppt'))

# 生成目标目录,如果存在则删除后建立

for dst_dir in dst_dirs:

if os.path.exists(dst_dir):

shutil.rmtree(dst_dir)

os.mkdir(dst_dir)

for i in range(0,2):

src_dirs = src_martix[i]

for src_dir in src_dirs:

files = os.listdir(path + src_dir)

for file in files:

print("move:%s->%s" % (path + src_dir + r'/' + file, dst_dirs[i]))

shutil.move(path + src_dir + r'/' + file, dst_dirs[i])

shutil.rmtree(path)

四、zip文件

zip素材包

https://video.mugglecode.com/script_project3_files.zip

监控某目录,如果出现zip压缩文件,自动解压并删除原始zip压缩包

Python实现。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os

import shutil

import time

def scan_dir():

# os.listdir(),不填参数,表示列出当前目录下的文件信息

for file in os.listdir():

if file.endswith('.zip'):

return file

def unzip(file):

dir_name = file.split('.')[0]

path = './' + dir_name

os.mkdir(path)

shutil.unpack_archive(file, path)

os.remove(file)

if __name__ == "__main__":

while True:

file = scan_dir()

if file:

print('')

unzip(file)

time.sleep(5)

五、自动压缩文件

图片素材压缩包,下载后解压使用

https://video.mugglecode.com/image.zip

监测image文件夹,如果包含的文件大于等于5个,则将这些文件压缩到archive1.zip文件中,并删除原始文件。

再次监测到文件多于5个的时候,生成archive2.zip压缩包,以此类推。

Python实现,没有按需求做,而是改为5个文件打一个zip包。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os

import shutil

import time

path = './image/'

tmp_path = './tmp/'

def scan_image_dir():

files = os.listdir(path)

if len(files) >= 5:

return files[:5]

def zip(zip_name, files):

os.mkdir(tmp_path)

for file in files:

shutil.move(path + file, tmp_path + file)

shutil.make_archive(zip_name, 'zip', tmp_path)

shutil.rmtree(tmp_path)

if __name__ == "__main__":

archive_count = 1

while True:

zip_name = 'archive' + str(archive_count)

files = scan_image_dir()

if files:

zip(zip_name, files)

archive_count += 1

print(files, end='')

print('已压缩')

time.sleep(5)

六、删除重复文件

下载并解压这个文件素材压缩包

https://video.mugglecode.com/problem3_files.zip

删除重复的文件,包括不同文件夹内的重复文件

Python实现。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os

import hashlib

files_path = './files'

file_list = list()

def get_files_list(path):

files = os.listdir(path)

for file in files:

if os.path.isdir(path + os.path.sep + file):

get_files_list(path + os.path.sep + file)

else:

file_list.append(path + os.path.sep + file)

def md5(file):

hash_md5 = hashlib.md5()

with open(file, "rb") as f:

for chunk in iter(lambda: f.read(4096), b""):

hash_md5.update(chunk)

return hash_md5.hexdigest()

def get_files_dict(file_list):

file_dict = dict()

for file in file_list:

file_md5 = md5(file)

if file_dict.get(file_md5) is None:

file_dict.setdefault(file_md5, file)

return file_dict

def dump_file_list(file_dict, file_list):

for md5_key in file_dict:

if file_dict[md5_key] in file_list:

file_list.remove(file_dict[md5_key])

return file_list

def del_file(file_list):

for file in file_list:

os.remove(file)

if __name__ == '__main__':

get_files_list(files_path)

file_dict = get_files_dict(file_list)

file_list = dump_file_list(file_dict, file_list)

print("待删除文件列表:%s" % file_list)

del_file(file_list)

主要是os、shutil相关函数及基本结构的练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值