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

时间:2017-06-27 09:30:43

标签: python csv shutil

我正在尝试将父文件夹中的所有.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)

3 个答案:

答案 0 :(得分:1)

使用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)

答案 1 :(得分:1)

从python 3.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)

答案 2 :(得分:0)

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?