首页 > 解决方案 > 自动文件复制/移动和重命名

问题描述

我是编码新手,需要一些帮助......本质上,在我真正找到立足点并获得基础知识之前,我正在尝试运行一些,但是我希望能够复制/将某些文件从一个特定目录移动/重命名到另一个或多个目录。

文件格式设置为所有文件都以日期开头(反转),后跟该文件的某些描述符,即 191017_TGT.csv 或 191016_APP.txt

我正在尝试找到让 Python/C# 执行以下步骤的解决方案:

  1. 确定源文件夹和目标文件夹
  2. 识别源文件夹中存在的文件描述符/类型。
  3. 如果它具有“A”描述符/类型并且是今天创建的,则复制/移动到文件夹“A”如果“B”复制/移动到文件夹“B”

这就是我正在尝试做的事情,我一直在玩(shutil.copy),但遇到了一些障碍。我希望能够自动化一些我必须完成的基本任务并加快速度。

此外,如果有人知道任何用于自动化任务的好资源,请告诉我或任何好的编码基础资源。

谢谢!

标签: c#pythonautomation

解决方案


这是一个帮助您入门的示例:

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)

推荐阅读