Автоматизация копирования / перемещения и переименования файлов - PullRequest
0 голосов
/ 17 октября 2019

Я новичок в программировании и мне нужно немного помочь ... по сути, я пытаюсь немного пробежаться, прежде чем я действительно найду основу и получу основы, однако я бы хотел иметь возможностькопировать / перемещать / переименовывать определенные файлы из одного конкретного каталога в другой или в несколько каталогов.

Форматы файлов настроены таким образом, что все файлы начинаются с даты (в обратном порядке), за которой следуют определенные дескрипторы для этого файла, т.е. 191017_TGT.csv или 191016_APP.txt

Я пытаюсь найти решение для получения Python / C # для выполнения следующих шагов:

  1. Определить исходную папку и папку назначения
  2. Определение файловых дескрипторов / типов, существующих в исходной папке.
  3. Если он имеет дескриптор / тип «A» и был создан сегодня, скопируйте / переместите в папку «A», если «B» скопируйте / переместите впапка 'B'

Это то, что я пытаюсь сделать, я играл с (shutil.copy), но проезжал некоторые дорожные блоки. Я хотел бы иметь возможность автоматизировать некоторые элементарные задачи, которые я должен выполнить, и немного ускорить процесс.

Также, если кто-нибудь знает какие-либо хорошие ресурсы для автоматизации задач, пожалуйста, дайте мне знать илихорошие исходники основ кодирования в целом.

Спасибо! ?

1 Ответ

1 голос
/ 17 октября 2019

Вот пример, с которого можно начать:

import fnmatch
import os
import shutil

src = r'C:\tmp\src'
dest = r'C:\tmp\dest'

for file_name in os.listdir(src):
    # match any files that start with two digits
    if fnmatch.fnmatch(file_name, '[0-9][0-9]*'):
        src_name = os.path.join(src, file_name)
        dest_name = os.path.join(dest, file_name)
        shutil.copyfile(src_name, dest_name)

В действии:

C:\tmp>dir /b/s
C:\tmp\dest
C:\tmp\src
C:\tmp\test_move.py
C:\tmp\src\191016_APP.txt
C:\tmp\src\191017_TGT.csv
C:\tmp\src\dont_move.txt

C:\tmp>python test_move.py

C:\tmp>dir /b/s
C:\tmp\dest
C:\tmp\src
C:\tmp\test_move.py
C:\tmp\dest\191016_APP.txt
C:\tmp\dest\191017_TGT.csv
C:\tmp\src\191016_APP.txt
C:\tmp\src\191017_TGT.csv
C:\tmp\src\dont_move.txt

Обратите внимание, что вы можете улучшить сопоставление с шаблоном, используя регулярные выражения ,но это может быть немного, чтобы войти в качестве неофита. Шаблон fnmatch , указанный выше, будет соответствовать любому файлу, который начинается с двух чисел.

РЕДАКТИРОВАТЬ: Если, например, вы хотите переместить разные файлы в разные места, вы можете изменить скрипт:

src = r'C:\tmp\src'
csv_dest = r'C:\tmp\dest_csv'
txt_dest = r'C:\tmp\dest_txt'

for file_name in os.listdir(src):
    # match any csv files that start with two digits
    if fnmatch.fnmatch(file_name, '[0-9][0-9]*.csv'):
        src_name = os.path.join(src, file_name)
        dest_name = os.path.join(csv_dest, file_name)
    elif fnmatch.fnmatch(file_name, '[0-9][0-9]*.txt'):
        src_name = os.path.join(src, file_name)
        dest_name = os.path.join(txt_dest, file_name)
    else:
        print(f"Skipping {file_name}")
        dest_name = None
    if dest_name:
        shutil.copyfile(src_name, dest_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...