Próbuję skopiować wszystkie pliki .csv w folderze nadrzędnym i wszystkie podfoldery wewnątrz, do nowego miejsca docelowego ("C: / projekty / CSVFiles").

Użyłem następującego kodu (z innego miejsca na forum), ale to tylko kopiuje pliki .csv w katalogu nadrzędnym (Datafiles), a nie z podfolderów wewnątrz / Datafiles /.

Doceniana każda rada. Dzięki

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)
2
Justin 27 czerwiec 2017, 12:30

3 odpowiedzi

Najlepsza odpowiedź

Użyj os.walk, aby przemierzyć drzewo katalogów.

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)
2
Błotosmętek 27 czerwiec 2017, 09:44

Python 2.2 do 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)

Ref: Użyj glob (), aby znaleźć pliki rekurencyjnie w Pythonie?.

0
ravindar 27 czerwiec 2017, 09:45

Począwszy od Pythona 3.5, {X0}} Obsługuje {{X1} } Parametr:

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

W starszych wersjach Python możesz użyć os.walk zamiast:

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
Aran-Fey 27 czerwiec 2017, 09:38