移动整理文件
在同一个盘中, 文件的移动只是更改了目录名, 只有跨盘才先复制到内存
import os
address_0 = r'C:\document\python2202\01语言基础\collating documents'
contents = os.listdir(address_0)
# 方法2: 提前创建好后缀名文件夹, 好处是不会重复创建已经存在的文件夹, 坏处是要提前遍历一遍
# suffix = {i.split('.')[-1]: None for i in contents if i.split('.')[-1].islower() and os.path.isfile(os.path.join(address_0, i))}
# suffix['None'] = None
# for i in suffix:
# os.makedirs(os.path.join(address_0, i))
for i in contents:
current_address = os.path.join(address_0, i)
# 筛选文件
if os.path.isfile(current_address):
# 采用字符串切割方法获取文件后缀名, 由于无后缀名的文件名中也允许存在'.', 因此该方法仍存在漏洞
current_list = current_address.split('.')
# 打开并读取记录原文件信息
f1 = open(current_address, 'rb')
file_content = f1.read()
f1.close()
# 是否带有后缀名, 有bug
# 拿到一个包含所有文件后缀名类型的容器, 用in和not in来判断是否是文件后缀名更靠谱
if current_list[-1].islower():
# 创建后缀名文件夹
# 方法1: 虽然不报错, 但是存在重复创建文件夹操作; 对比方法2好处是将文件夹的创建嵌套在文件写入循环中, 减少遍历次数
os.makedirs(os.path.join(address_0, current_list[-1]), exist_ok=True)
# 将原文件写入后缀名文件夹, 并删除原文件
f2 = open(os.path.join(address_0, current_list[-1], i), 'wb')
f2.write(file_content)
f2.close()
os.remove(current_address)
else:
# 移动没有后缀名的文件
os.makedirs(os.path.join(address_0, 'None'), exist_ok=True)
f2 = open(os.path.join(address_0, 'None', i), 'wb')
f2.write(file_content)
f2.close()
os.remove(current_address)