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

2019-07-28  本文已影响0人  大白python

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

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

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

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

【pathlib】标准库处理方法,也正体现python的特性:简单,快捷;只需要使用正斜杠将一个路径或文件名传给一个新的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分大白,对我,够用,能用,就好
上一篇 下一篇

猜你喜欢

热点阅读