Запуск сценария метаданных из одного типа файла в другой с помощью glob - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок в python и в настоящее время застрял на том, как запустить мой сценарий метаданных для 2 разных типов файлов в каталоге.Я рассчитал статистику для набора GeoTIFF, и мне нужно взять статистику по этим полосам и вставить ее в метаданные для другого набора файлов.По сути, у меня есть файлы .tif с вычисленной статистикой, и мне нужно вставить эту статистику в исходные заголовки исходного файла.

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

Нужно ли реструктурировать мой скрипт, чтобы использовать для / if операторов?

Мой рабочий скрипт для отдельных файлов работает с этим:

import sys
from osgeo import gdal, gdalconst

calculated_files = gdal.Open(*.tif, gdalconst.GA_ReadOnly)
source_files = gdal.Open(*.anotherfiletype, gdalconst.GA_Update)

stats = calculated_files.GetMetadata()
band = calculated_files.GetRasterBand(1)

bandStats = band.GetMetadata()

print('bandStats is set to')
print(bandStats)

source_files.SetMetadata(bandStats, )

del(calculated_files)
del(source_files)

Я возился с этим дополнением, используя glob и цикл for:

import glob
import os

types = ('*.tif', '*.anotherfiletype')
all_files = []
for files in types:
    all_files.extend(glob.glob(files))

1 Ответ

0 голосов
/ 22 ноября 2018

Похоже, вам нужно превратить ваш первый скрипт в функцию, а затем передать в словарь, который отображает, какие два файла идут вместе:

def transfer_metadata(tif_file, other_file):
    calculated_files = gdal.Open(tif_file, gdalconst.GA_ReadOnly)
    source_files = gdal.Open(other_file, gdalconst.GA_Update)

    stats = calculated_files.GetMetadata()
    band = calculated_files.GetRasterBand(1)
    bandStats = band.GetMetadata()
    print('bandStats is set to {}'.format(bandStats))

    source_files.SetMetadata(bandStats, )

    # optional because I don't see how you're using stats otherwise?
    return stats

data_dict = {'file1.tif': 'monkey.xml', 
             'file2.tif': 'giraffe.txt',
             'file40.tif': 'kitten.html'
             }
for k, v in data_dict.items():
    # The print will print stats since you're returning them
    # If you don't need stats for anything, delete the return and
    # this print call
    print(transfer_metadata(tif_file=k, other_file=v))
...