【问题标题】:Python - move all files from one folder to another if their file names contain specified wordsPython - 如果文件名包含指定的单词,则将所有文件从一个文件夹移动到另一个文件夹
【发布时间】:2023-01-08 03:03:09
【问题描述】:

我有一个包含许多文件的文件夹,这些文件的名称类似于 homeXXX_roomXXX_high.csvhomeXXX_roomXXX_low.csv,其中 XXX 部分替换为三位数。

我想使用一些代码根据文件名中“home”旁边的数字将文件移动到单独的文件夹中。例如,我想指定名称以home101home103home320home553等开头的文件都应移至文件夹A,而以home555home431、@开头的文件987654333@ 应该转到 FolderB。

到目前为止我有这段代码:

import shutil
import os

source = '/path/to/source_folder'
dest1 = '/path/to/FolderA'
dest2 = '/path/to/FolderB'

files = os.listdir(source)

for f in files:
    if (f.startswith("home101") or f.startswith("home103")):
        shutil.move(f, dest1)
    elif (f.startswith("home431") or f.startswith("home555")):
        shutil.move(f, dest2)

但是,指定所有 ifelse 案例是乏味的。我想使用某种结构化数据(例如 list)来指定“家庭”号码组和相应的文件夹路径。我如何在 Python 中执行此操作?

【问题讨论】:

  • “有人有什么想法吗?谢谢。”欢迎来到堆栈溢出。请阅读How to Ask并注意这是不是论坛.我一直有很多想法,但没有一个与这里的问题相关。但更重要的是,那是not a question。我们在“谢谢”中也是not interested。我将尝试编辑问题以显示适当的风格,但我不确定我是否理解您希望完成的工作。
  • 好吧,为了完成编辑,多看了几遍,似乎够清楚了;但是有很多方法可以做到这一点,而且无论如何都会涉及多个步骤。一般来说,我们不尝试教设计在这里,只有个别的概念。您可能会发现一个实际的讨论论坛,例如 Reddit 或 Quora,对于您正在寻求的帮助更有用。

标签: python directory file-move


【解决方案1】:

您可以为包含“home+number”的 folderA 创建一个数组

FolderAGroup = ['home101', 'home103', 'homeXXX', 'homeXXX']

如果他们像你说的那样用“_”分开,请使用此代码过滤它们 如果他们不那样分裂,将无法工作。

files = os.listdir(source)

for f in files:
  parts = f.split('_')
  # Get the first part of the filename before the _
  home_number = parts[0]
  # Check if the home number is in the FolderA group array
  if home_number in FolderAGroup:
    shutil.move(f, dest1)
  else:
    shutil.move(f, dest2)

如果您想要更多文件夹,可以使用更多 elif 语句进行扩展。

【讨论】:

    【解决方案2】:

    如果名称 homexxx 是递增的,您可以尝试这样的事情:

    home_names_list_1 = []
    home_names_list_2 = []
    for i in range(100):
        home_names_list_1.append("home" + str(i))
    
    for i in range(100,200):
        home_names_list_2.append("home" + str(i))
    
    for file in files:
        moved = False
        for name in home_names_list_1:
            if file.startswith(name):
                print("move somewhere")
                moved = True
                break
        if moved:
            break
        
        for name in home_names_list_2:
            if file.startswith(name):
                print("move somewhere else")
                break
        
        print(" did not move because did not match anything")
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多