救助大佬python 文件夹处理
现在一级文件夹下文件名称:例:2219-007-180098-P-001
2219-007-180098-Y-001
2219-007-180098-K-001
2219-007-180098-Y-002
2219-007-180098-Y-003
2219-007-180098-Y-004
2219-007-180098-Y-005
2219-007-180098-JG-001
2219-007-180098-K-002
-为分隔符前面3段新建一个以2219-007-180098的文件夹,将所有前3段匹配的移动到新创建的文件夹内。*:延伸在建前面4段的2219-007-180098-Y符合的在移入文件夹内。
结果为:
新建的二级文件夹下匹配装入在装入
有大佬帮助么
匹配出错了吧 import os
import re
# 定义文件夹路径和正则表达式
folder_path = "path/to/folder"
regex = r"^(\d{4}-\d{3}-\d{6})-{1,2}-\d{3}$"
# 遍历文件夹内所有文件
for filename in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, filename)):
# 获取文件名和文件路径
file_path = os.path.join(folder_path, filename)
file_name = os.path.basename(file_path)
# 判断文件名是否匹配正则表达式
match = re.match(regex, file_name)
if match:
# 创建新的文件夹并移动文件
new_folder_path = os.path.join(folder_path, match.group(1))
if not os.path.exists(new_folder_path):
os.mkdir(new_folder_path)
os.rename(file_path, os.path.join(new_folder_path, file_name))
# 如果文件名的第四段是Y,则移动所有前4段相同的文件
if file_name.split("-") == "Y":
for y_filename in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, y_filename)):
y_file_path = os.path.join(folder_path, y_filename)
y_file_name = os.path.basename(y_file_path)
if re.match(r"^" + match.group(1) + r"-Y-\d{3}$", y_file_name):
os.rename(y_file_path, os.path.join(new_folder_path, y_file_name))
先比较出文件夹名,然后判定文件,移入就行了
import os
def movedir(top_dir):
for dir_name in os.listdir(top_dir):
# 过滤文件夹名,包含四道杠
if dir_name.find("-") != -1:
name_arr = dir_name.split("-")
item_num = len(name_arr)
if item_num == 5:
base_dir = os.path.join(top_dir, dir_name)# 在已有的文件夹里面创建
for i in range(3, item_num+1):
new_dir_name = "-".join(name_arr[:i])
base_dir = os.path.join(base_dir, new_dir_name)
if not os.path.exists(base_dir):
os.makedirs(base_dir)
movedir(r"D:\projects\testproject\test")
效果:
├─2219-007-180098-JG-001
│└─2219-007-180098
│ └─2219-007-180098-JG
│ └─2219-007-180098-JG-001
├─2219-007-180098-K-002
│└─2219-007-180098
│ └─2219-007-180098-K
│ └─2219-007-180098-K-002
└─2219-007-180098-Y-005
└─2219-007-180098
└─2219-007-180098-Y
└─2219-007-180098-Y-005 复杂度太高,容易出错,而且不好维护 os模块和split 或者re模块 ilinxiao 发表于 2023-4-1 00:39
import os
def movedir(top_dir):
大佬想要效果这样的咋样移动下呢:
├─2219-007-180098
│└─2219-007-180098-JG
│ └─2219-007-180098-JG-001这个是原来的文件夹移动进来的
│
│└─2219-007-180098-K
│ └─2219-007-180098-K-002这个是原来的文件夹移动进来的
│
└─2219-007-180098-Y
└─2219-007-180098-Y-005这个是原来的文件夹移动进来的
caoliu949 发表于 2023-4-1 00:16
import os
import re
大佬,没成功, 遍历文件夹内所有文件,我想要的是文件夹匹配前几段的保持原内容移动到新建的下一级。效果参考5楼这样来表示:
├─2219-007-180098 新建的第一级
│└─2219-007-180098-JG 新建的第二级
│ └─2219-007-180098-JG-001这个是原来的文件夹移动进来的
│
│└─2219-007-180098-K 新建的第二级(第一级不能建了重复的了)
│ └─2219-007-180098-K-002这个是原来的文件夹移动进来的
│
└─2219-007-180098-Y新建的第二级(第一级不能建了重复的了)
└─2219-007-180098-Y-005这个是原来的文件夹移动进来的 asd124689 发表于 2023-4-1 07:53
os模块和split 或者re模块
还在研究中,以前用过shutil这个来处理过,现在有点困惑不知道怎么写了
页:
[1]
2