将文件夹目录中的所有 .csv 文件复制到 python 中的一个文件夹

Copy all .csv files in a directory of folders to one folder in python

我正在尝试将父文件夹及其所有子文件夹中的所有 .csv 文件复制到新目标 ("C:/Projects/CSVFiles")。

我使用了以下代码(来自论坛的其他地方),但这只会复制父目录 (DataFiles) 中的 .csv 文件,而不会复制 /datafiles/ 中的子文件夹。

任何建议表示赞赏。谢谢

import glob
import shutil
import os

src_dir = "C:/Projects/DataFiles"
dst_dir = "C:/Projects/CSVFiles"
for CSVfile in glob.iglob(os.path.join(src_dir, "*.csv")):
shutil.copy(Excelfile, dst_dir)

使用os.walk遍历目录树。

import os
import shutil
src_dir = "C:/Projects/DataFiles"
dst_dir = "C:/Projects/CSVFiles"
for root, dirs, files in os.walk(src_dir):
    for f in files:
        if f.endswith('.csv'):
            shutil.copy(os.path.join(root,f), dst_dir)

从python3.5开始,glob支持the recursive parameter:

glob.iglob(os.path.join(src_dir, "**", "*.csv"), recursive=True)

在旧的 python 版本中,您可以使用 os.walk 代替:

import os

for root, dirs, files in os.walk(src_dir):
    for filename in files:
        if not filename.endswith('.csv'):
            continue

        filepath = os.path.join(root, filename)

Python 2.2 到 3.4

import fnmatch
import os

src_dir = "C:/Projects/DataFiles"
dst_dir = "C:/Projects/CSVFiles"

for root, dirnames, filenames in os.walk(src_dir):
    for filename in fnmatch.filter(filenames, '*.csv'):
        shutil.copy(os.path.join(root, filename),dst_dir)

参考:Use a Glob() to find files recursively in Python?