Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何将具有特定名称的文件移动到具有相同名称的文件夹中_Python_Directory_Operating System - Fatal编程技术网

Python:如何将具有特定名称的文件移动到具有相同名称的文件夹中

Python:如何将具有特定名称的文件移动到具有相同名称的文件夹中,python,directory,operating-system,Python,Directory,Operating System,我的工作目录中有很多文件和文件夹(类似的情况): 因此,文件和子文件夹都以AAA或BBB开头(以CCC、DDD等开头)。我想做的是一个python脚本,它将所有AAA文件移动到AAA子文件夹,并对所有同名文件和子文件夹进行迭代,以获得如下结果: AAA_SUBFOLDER - AAA_FILE_1 - AAA_FILE_2 BBB_SUBFOLDER - BBB_FILE_1 - BBB_FILE_2 ... 你能帮我吗?提前谢谢 此解决方案应能满足您的要求。 步骤: 确保已安

我的工作目录中有很多文件和文件夹(类似的情况):

因此,文件和子文件夹都以
AAA
BBB
开头(以CCC、DDD等开头)。我想做的是一个python脚本,它将所有
AAA
文件移动到
AAA
子文件夹,并对所有同名文件和子文件夹进行迭代,以获得如下结果:

AAA_SUBFOLDER
  - AAA_FILE_1
  - AAA_FILE_2
BBB_SUBFOLDER
  - BBB_FILE_1
  - BBB_FILE_2
...

你能帮我吗?提前谢谢

此解决方案应能满足您的要求。 步骤:

  • 确保已安装python
  • 将脚本保存到文件(比如main.py)
  • 使用2个参数运行保存的文件-1表示要组织的路径,2表示子文件夹的分隔符。示例:
    python main.py-p“D:\path\to\files”-D“\uu”
  • !!这不会重新排列内部文件夹,只有顶级文件夹

    如果你有任何问题,我很乐意帮助你

    import os
    import argparse
    from pathlib import Path
    
    def parse_args() -> tuple:
        ap = argparse.ArgumentParser()
        ap.add_argument("-p", "--path", default="./files", help="path to the folder that needs organizing")
        ap.add_argument("-d", "--delimiter", default="_", help="delimiter of file names")
        return ap.parse_args()
    
    args = parse_args()
    
    for filename in os.listdir(args.path):
        file_path = os.path.join(args.path, filename)
        if not os.path.isfile(file_path):
            continue
        subfolder_name = Path(filename).stem.split(args.delimiter)[0]
        subfolder_path = os.path.join(args.path,subfolder_name)
        os.makedirs(subfolder_path, exist_ok=True)
        os.rename(file_path, os.path.join(subfolder_path, filename))
    
    
    

    这是我使用
    pathlib
    rename;)的解决方案脚本假定当前路径是包含文件和文件夹的路径

    #使用pathlip
    从集合导入defaultdict
    从pathlib导入路径
    TARGET_DIR=路径('.')#脚本DIR
    文件和文件夹=TARGET\u DIR.rglob('*'))
    #使用文件和文件夹进行存储
    存储=默认dict(列表)
    对于文件和文件夹中的blob:
    如果blob.is_file():
    存储['files'].append(blob)
    elif blob.is_dir():
    存储['dir'].append(blob)
    #对于每个目录,检查文件前3个字符
    #如果匹配,则按重命名移动
    对于存储['dir']中的目录:
    对于存储['files']中的文件:
    如果file.name[:3]==directory.name[:3]:
    重命名(目录/文件)
    #你也可以看看舒蒂尔
    
    到目前为止,您尝试了什么?你遇到什么问题了吗?谢谢你,我真的很感谢你的帮助。它非常有效!谢谢你的帮助!
    import os
    import argparse
    from pathlib import Path
    
    def parse_args() -> tuple:
        ap = argparse.ArgumentParser()
        ap.add_argument("-p", "--path", default="./files", help="path to the folder that needs organizing")
        ap.add_argument("-d", "--delimiter", default="_", help="delimiter of file names")
        return ap.parse_args()
    
    args = parse_args()
    
    for filename in os.listdir(args.path):
        file_path = os.path.join(args.path, filename)
        if not os.path.isfile(file_path):
            continue
        subfolder_name = Path(filename).stem.split(args.delimiter)[0]
        subfolder_path = os.path.join(args.path,subfolder_name)
        os.makedirs(subfolder_path, exist_ok=True)
        os.rename(file_path, os.path.join(subfolder_path, filename))