美文网首页
重写V2.2python 循环控制流:整理文件夹中的文件

重写V2.2python 循环控制流:整理文件夹中的文件

作者: 大白python | 来源:发表于2019-07-28 17:25 被阅读0次

    上一篇V2.2python 循环控制流:整理文件夹中的文件,方便大白整十几万张图片。
    今有个简友私信问我,为什么代码在windows外的操作系统用不了?
    对代码重试运一次,确定不是代码逻辑问题。那就去问下度娘与查下文档,才知问题是:

    windows文件名用的反斜杠,Mac/Linux系统不兼容。

    python解决这个问题,是通过使用python3的新标准库:【pathlib】来处理文件与其路径。

    了解此问题的根源原来是:
    由于上世纪 80 年代早期计算机历史上的一个小意外。「MS-DOS」的第一版使用了正斜杠字符来指定命令行选项。当微软在「MS-DOS 2.0」中加入了对文件夹的支持时,正斜杠字符已经被使用了,所以他们采用了反斜杠作为替代。35 年后,我们仍然被受困于这种不一致性。

    【pathlib】标准库处理方法,也正体现python的特性:简单,快捷;只需要使用正斜杠将一个路径或文件名传给一个新的Path()对象,然后它将处理余下的斜杠处理操作。
    使用时注意:

    • 你应该在使用「pathlib」函数的情况下使用正斜杠。「Path()」函数将会把正斜杠转化为适应当前操作系统环境的正确斜杠。赞!

    • 如果你想要在路径上进行添加,你可以直接在你的代码中使用「/」操作符。

    现重写对文件夹的文件整理的代码:

    # -*- conding = utf8 -*-
    #athur : 大白python
    #time  : 20190728
    #title : python整理文件夹中的文件 V2系统通用版
    #简书  :大白python
    
    import os
    import shutil
    from pathlib import Path
    
    #1. 获取当文件夹路径
    current_path = Path("D:\自媒体\无水印头像大全\新建文件夹\萌娃头像集合-微博配图/")   #正斜杠的需整理的文件夹路径 20190727更改
    print("开始处理文件夹中的图片:"+ str(current_path))
    
    #2. 获取当文件夹中的所有文件与文件夹,存在列表中            file_or_folder[]
    file_or_folder = os.listdir(current_path)
    #print(file_or_folder)
    
    #3. 判断file_or_folder列表中每一个元素,isfile则移入以图片前16位字符命名的文件夹中,isfolder则passabs
    # 3.1 新建一存储文件夹后:整理后,务必确保“整理后”是空的
    os.makedirs(current_path /"整理后")
    set = []
    for filename in file_or_folder:
        pic_path = current_path/filename  ##用局部变量存文件地址 20190728改
    if pic_path.exists() and pic_path.suffix == ".jpg"or pic_path.suffix == ".gif"  :
        #3.2 isfabsile 拆出文件名,并取前16位
        pic_name = filename.split(".")[0]
        print("正在移动图片:"+ filename)
        string16 = pic_name[:16]
        
        #3.3 在“整理后”文件夹中新那子前16位字符命名的文件夹,并将16位字符存入到set中
        if string16 in set:
            #存在文件夹
            #3.4 移动图片到相应的前16位字符命名的文件夹中
            ##move函数参数必须是字符串,需将WindowsC对象转换为str 20190728更改
            shutil.move(str(current_path/filename),str(current_path/"整理后"/string16))
        else:
            #不存在文件夹创建文件夹
            set.append(string16)
            os.makedirs(current_path/"整理后"/string16)
            #3.4 移动图片到相应的前16位字符命名的文件夹中
            ##move函数参数必须是字符串,需将WindowsC对象转换为str 20190728更改
            shutil.move(str(current_path/filename),str(current_path/"整理后"/string16))
    else:
        print("不是\"JPG\"图片")
    

    PS:注意shutil.move函数参数必须是字符串,需将WindowsC对象转换为str字符串

    100分大神,80分大牛,60分大白,对我,够用,能用,就好
    

    相关文章

      网友评论

          本文标题:重写V2.2python 循环控制流:整理文件夹中的文件

          本文链接:https://www.haomeiwen.com/subject/jbsprctx.html