c语言删除文件remove_「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相关函数及基本结构的练习。

3d85a76c0938a4f50d59b116c3792f65.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值