吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 744|回复: 10
收起左侧

[求助] 救助大佬python 文件夹处理

[复制链接]
74Y1085 发表于 2023-3-31 23:30
现在一级文件夹下文件名称:
例: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符合的在移入文件夹内。
结果为:
  新建的[2219-007-180098]二级文件夹下匹配装入[2219-007-180098-P]在装入[2219-007-180098-P-001]

有大佬帮助么
image.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
开心熊猫741 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

刘样andholiday 发表于 2023-3-31 23:42
匹配出错了吧
caoliu949 发表于 2023-4-1 00:16
import os
import re

# 定义文件夹路径和正则表达式
folder_path = "path/to/folder"
regex = r"^(\d{4}-\d{3}-\d{6})-[A-Z]{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("-")[3] == "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))
ymhld 发表于 2023-4-1 00:24
先比较出文件夹名,然后判定文件,移入就行了
ilinxiao 发表于 2023-4-1 00:39
[Python] 纯文本查看 复制代码
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
snowfneg2020 发表于 2023-4-1 05:49
复杂度太高,容易出错,而且不好维护
asd124689 发表于 2023-4-1 07:53
os模块和split 或者re模块
 楼主| 74Y1085 发表于 2023-4-1 20:23
ilinxiao 发表于 2023-4-1 00:39
[mw_shl_code=python,true]
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这个是原来的文件夹移动进来的
         
 楼主| 74Y1085 发表于 2023-4-1 20:49

大佬,没成功, 遍历文件夹内所有文件,我想要的是文件夹匹配前几段的保持原内容移动到新建的下一级。效果参考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这个是原来的文件夹移动进来的
 楼主| 74Y1085 发表于 2023-4-1 20:50
asd124689 发表于 2023-4-1 07:53
os模块和split 或者re模块

还在研究中  ,以前用过shutil这个来处理过,现在有点困惑不知道怎么写了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表