【问题标题】:Moving half of the files from one directory into another将一半文件从一个目录移动到另一个目录
【发布时间】:2021-12-28 01:27:29
【问题描述】:

我是 Python 新手,我正在尝试使用 shutil 将文件从一个目录移动到另一个目录。我了解如何为一个文件或整个目录执行此操作,但如果我只想移动一些文件,我该如何执行此操作。例如,如果我有一个包含 50 个文件的目录,而我只想移动这 25 个文件中的一半。有没有办法指定它们而不是做

shutil.move(source, destination)

25 次?

【问题讨论】:

    标签: python file directory shutil


    【解决方案1】:

    指定要移动的文件到列表等集合中,然后如果在Python 3.4之后,还可以使用pathlib的类Path来移动文件。

    from pathlib import Path
    SRC_DIR = "/src-dir"
    DST_DIR = "/dst-dir"
    
    FILES_TO_MOVE = ["file1", "file2", "file3", ..]
    
    for file in FILES_TO_MOVE:
        Path(f"{SRC_DIR}/{file}").rename(f"{DST_DIR}/{file}")
    

    https://docs.python.org/3.4/library/pathlib.html#pathlib.Path.rename

    【讨论】:

      【解决方案2】:

      shutil.move() 将单个文件或目录作为参数,因此您一次不能移动多个。 然而,这就是循环的用途!

      基本上,首先使用 os.listdir() 生成目录中的文件列表,然后循环遍历 一半 列表,移动每个文件,如下所示:

      import os, shutil
      
      srcPath = './oldPath/'
      destPath = './newPath/'
      files = os.listdir(srcPath)
      
      for file in files[:len(files)//2]:
          shutil.move(srcPath + file, destPath + file)
      

      你没有提到如果有奇数个文件没有平均分配怎么办,所以我四舍五入。您可以在整数除法后加 1 进行四舍五入。

      对该代码的一个警告,它将移动目录中的一半项目,包括子目录。如果您只有文件,则不会有任何效果,但如果有,并且您不想移动子目录,则需要先从“文件”列表中删除子目录。

      【讨论】:

      • 还请注意,您没有指定要移动 哪些 文件,上面的示例将按字母顺序移动 半部分,因为这就是listdir() 返回。您始终可以先重新排列列表。
      猜你喜欢
      • 2017-07-20
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2014-12-04
      • 2021-11-12
      • 2016-06-09
      • 2016-04-04
      • 1970-01-01
      相关资源
      最近更新 更多