我的目录包含多个文件夹,每个文件夹都有自己的几个子目录。我需要移动包含' 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)
答案 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)
抱歉误读了:) 最好的问候