【问题标题】:Merge two folders in python在python中合并两个文件夹
【发布时间】:2018-03-06 02:46:33
【问题描述】:

我需要合并两个文件夹,

文件夹分别命名为 12345 和 12345_

如何将两者合并?

我已经尝试过了,但我最终得到了“12345”。

for file in files:
    subFolder = os.path.join(destpath, file[:6])
    if not os.path.isdir(subFolder):
        os.makedirs(subFolder)
    shutil.copy(os.path.join(root, file), subFolder)

【问题讨论】:

标签: python merge


【解决方案1】:

从python,你也可以调用rsync,这是为此而生的。

import subprocess

## define your paths
path1 = '/path/to/12345/'
path2 = '/path/to/12345_/'

## where to place the merged data
merged_path = '/path/to/merged/'

## write an rsync commands to merge the directories
rsync_cmd = 'rsync' + ' -avzh ' + path1 + ' ' + path2 + ' ' + merged_path

## run the rsync command
subprocess.run(rsync_cmd, shell=True)

【讨论】:

    【解决方案2】:

    你可以使用这样的东西,它将所有文件从文件夹 1 复制到文件夹 2,因此文件夹 2 将包含来自 1 和 2 的所有文件:

    #!/usr/bin/env python
    
    import subprocess as sbp
    import os
    
    path=raw_input('Please enter a path\n')
    fol = os.listdir(path)
    p2 = raw_input('Please enter a path\n')
    
    for i in fol:
        p1 = os.path.join(path,i)
        p3 = 'cp -r ' + p1 +' ' + p2+'/.'
        sbp.Popen(p3,shell=True)
    

    【讨论】:

      【解决方案3】:

      我在纯 python 中编写了一个简单的递归函数,将一个文件夹及其内容合并到另一个文件夹中:

      import os
      import shutil
      
      def merge(scr_path, dir_path):
        files = next(os.walk(scr_path))[2]
        folders = next(os.walk(scr_path))[1]
        for file in files: # Copy the files
          scr_file = scr_path + "/" + file
          dir_file = dir_path + "/" + file
          if os.path.exists(dir_file): # Delete the old files if already exist
            os.remove(dir_file)
          shutil.copy(scr_file, dir_file)
        for folder in folders: # Merge again with the subdirectories
          scr_folder = scr_path + "/" + folder
          dir_folder = dir_path + "/" + folder
          if not os.path.exists(dir_folder): # Create the subdirectories if dont already exist
            os.mkdir(dir_folder)
          merge(scr_folder, dir_folder)
      
      path1 = "path/to/folder1"
      path2 = "path/to/folder2"
      
      merge(path1, path2)
      

      这里folder1 被合并到folder2

      对于每个folder1元素,它检查该元素是否已经存在于folder2中,如果存在则替换该元素,如果不存在则创建该元素。

      最后,合并的文件夹包含其原始元素加上另一个文件夹的元素。

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2019-11-13
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2020-03-18
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多