Как взять информацию из имени файла и разделить ее на несколько частей для сохранения в списке - PullRequest
1 голос
/ 17 июня 2020

Мне нужно взять этот раздел кода и превратить его в функцию, которая будет извлекать информацию из имен файлов .h5 файлов в каталоге. Я новичок в python, поэтому надеюсь, что мои объяснения здесь имеют смысл. Ниже приведен код, а под ним пример имен файлов данных, которые необходимо проанализировать.

atl06_dir = 'ATL06 files'
filenames = glob.glob(atl06_dir + '/*h5')
year_selected = 2019
filenames_selected = list()
for filename in filenames:
   product, year, month, day, hour, minute, second, track, cycle, granule, release, version = icesat2_data_utils.h5FilenameParts(os.path.basename(filename)) 
#need to replace this line with a function that grabs from the filename. This one does not work
   if int(year) == year_selected: 
      filenames_selected.append(filename) 

Как я могу заставить этот раздел читать имя файла .h5 и выводить различные разделы имя на основе разделений в имени, которое вы можете увидеть в примере имени файла здесь:

ATL06_ [yyyymmdd] [hhmmss] [ttttccss] [vvv_rr] .h5

I чувствую, что могу оказаться на правильном пути, попросив его прочитать определенные символы имени, например:

# product ATL06 = 0 to 5
# year yyyy = indexes 8 to 12
# month mm = 12 to 14
# day dd = 14 to 16
# hour hh = 18 to 20
# minute mm = 20 to 22
# second ss = 22 to 24
# Reference ground track tttt = 27 to 31
# cycle cc = 31 to 33
# orbital segment ss = 33 to 35
# version vvv = 38 to 44

1 Ответ

0 голосов
/ 17 июня 2020

Вы можете либо нарезать его в соответствии с вашими требованиями, например,

string ="ATL06_[yyyymmdd][hhmmss][ttttccss][vvv_rr].h5"
product = string[0:5]

Чтобы извлечь элементы из [], вы можете использовать модуль regex:

import re
string ="ATL06_[yyyymmdd][hhmmss][ttttccss][vvv_rr].h5"
re.findall('\[(.*?)\]',string)

Это возвращает список совпадающих строк:

['yyyymmdd', 'hhmmss', 'ttttccss', 'vvv_rr']

И каждый элемент в этой строке является списком, при необходимости его можно разрезать индивидуально

...