Прокрутите подпапку и скопируйте файл с определенным расширением

У меня есть родительская папка, назовем ее «рабочее пространство». В этой родительской папке есть вложенные папки, в которых есть дополнительные вложенные папки, имеющие определенное соглашение об именах. Это выглядит примерно так:

    - Workspace 
      - Subfolder A 
         - Name 
         - Image 
         - Class 
      - Subfolder B 
         - Name 
         - Image 
         - Class 
      - Subfolder C 
         - Name  
         - Image 
         - Class

Мне нужна какая-то помощь или направление в написании сценария, который повторяет A-C в рабочей области и копирует все файлы в папке «images» каждой подпапки в новое место назначения.

Это то, что у меня есть до сих пор:

import os
import arcpy
import shutil
import fnmatch

workspace = "source"
pfolder = "rootdir"

files = os.listdir(workspace)
print (files)

test = workspace + "\\scratch.gdb"
if os.path.exists(test):
    print ("Scratch GDB already exists")
    shutil.rmtree(test)
    scratch = arcpy.CreateFileGDB_management(workspace,"scratch")
    print ("Original Scratch GDB removed and new GDB created ")
else:
    scratch = arcpy.CreateFileGDB_management(workspace,"scratch")
    print ("Scratch GDB has been created")

def main():
        for dirname, dirnames, filenames in os.walk(pfolder):
            for file in filenames:
                if fnmatch.fnmatch(file,"*.jpg")==True:
                    shutil.copy2(file,scratch)
                    print("Files have been copied!")
                else:
                    print("Error in copying files")

Я хочу скопировать все файлы jpg в этот подкаталог и поместить их в базу геоданных. По какой-то причине он не запускает строку кода, которая выполняет цикл и копирование.


person jollofrice    schedule 26.09.2018    source источник
comment
Где вы вызываете свою функцию main?   -  person Emmanuel-Lin    schedule 26.09.2018


Ответы (1)


Shutil может не работать, для ввода растрового файла в базу геоданных вы не может использовать расширение файла в имени.

Приведенный ниже код — это ваш код с минимальными изменениями (например, с использованием CopyRaster_management вместо copy2), чтобы он работал, поэтому, возможно, это не лучший код, потому что я не беспокоился об этом, но он работает:

import os
import arcpy
import shutil
import fnmatch

workspace = "C:\\Teste\\"
pfolder = r'C:\Teste\\'

files = os.listdir(workspace)
print (files)

tests = workspace + "\\scratch.gdb"
sGdbP = "C:\\Teste\\scratch.gdb\\"
if os.path.exists(tests):
    print ("Scratch GDB already exists")
    shutil.rmtree(tests)
    scratch = arcpy.CreateFileGDB_management(workspace,"scratch")
    print ("Original Scratch GDB removed and new GDB created ")
else:
    scratch = arcpy.CreateFileGDB_management(workspace,"scratch")
    print ("Scratch GDB has been created")

for dirname, dirnames, filenames in os.walk(pfolder):
    for file in filenames:
        if fnmatch.fnmatch(file,"*.tif")==True:
            try:
                arcpy.env.workspace = dirname
                in_data = file
                out_data = sGdbP + file[:-4] # cannot use extension
                arcpy.CopyRaster_management(in_data, out_data)
            except:
                print "Raster To Geodatabase example failed."
                print arcpy.GetMessages()
            print("Files have been copied!")

print "End of script"
person Lucas    schedule 29.03.2019