Python脚本根据文件名提取所有子目录

时间:2016-06-08 12:18:42

标签: python

我的目录包含多个文件夹,每个文件夹都有自己的几个子目录。我需要移动包含' Volume.csv'的所有文件。进入名为Volume的目录。

Folder1
|---1Area.csv
|---1Circumf.csv
|---1Volume.csv

Folder2
|---2Area.csv
|---2Circumf.csv
|---2Volume.csv

Volume

我尝试使用os.walk和regex的组合来检索文件名但没有太多运气。

有什么想法吗?

谢谢!

Sunworshipper,谢谢你的回答!

我运行了以下代码,它移动了整个目录,而不仅仅是包含' Volume'的文件名。是否清楚为什么会发生这种情况?

import os
import shutil

source_dir = "~/Stats/"
dest_dir = "~/Stats/Volume/"

file_paths = set()

for dir_, _, files in os.walk(source_dir):
    for fileName in files:
        if "Volume" in fileName:
            relDir = os.path.relpath(dir_, source_dir)
            file_paths.add(relDir)

for matched in file_paths:
    shutil.move(matched, dest_dir)

2 个答案:

答案 0 :(得分:2)

您可以使用glob。它返回与您为其提供的表达式匹配的路径名列表。

import glob
import shutil

dest = 'testfiles/'

files = glob.glob('*/*test.csv')

for file in files:
    shutil.move(file, dest)

我使用了相对路径,但您也可以使用绝对路径。 shutil将文档移动到新位置。有关详细信息,请参阅glob.glob documentation

答案 1 :(得分:0)

import os
import shutil

设置源目录和目标目录

source_dir = "/Users/nenad/Documents/Python Files/Random Tests"
dest_dir = "/Users/nenad/Documents/Python Files/Random Tests/volume"

此设置现在将保存与您的子字符串匹配的所有文件的路径。

file_paths = set()

现在我只考虑包含具有子字符串" hello"的文件的目录。在文件名中。

for dir_, _, files in os.walk(source_dir):
    for fileName in files:
        if "hello" in fileName:
            relDir = os.path.relpath(dir_, source_dir)
            relFile = os.path.join(relDir, fileName)
            file_paths.add(relFile)

现在你只需用shutil将它们移动到你的目的地。

for matched in file_paths:
    shutil.move(matched, dest_dir)

抱歉误读了:) 最好的问候