2014-06-17 3 views
0

Я использую Python 2.6Python - имя выходного файла, чтобы включить часть имени входного файла

Я ввода n количество файлов и с помощью цикла для обработки данных в файлах и выводит эту информацию в один выходной файл ,

Входные файлы называются inputfile_date_time.h5, где каждая дата/время различается для каждого входного файла.

Я ищу имя выходного файла outputfile_firstdate_firsttime_lastdate_lasttime.pkt - где firstdate_firsttime - это дата и время ввода файла в первый раз (ака часть имени входного файла, которая поступает сначала в последовательности n файлов) и где lastdate_lasttime является дата и время входного файла с последнего времени (иначе часть имени файла ввода, который приходит последним в последовательности n файлов)

Мой код в настоящее время создана следующим образом:

import os 
from glob import glob 
from os.path import basename 
import numpy 
import hdf5 
#set location/directory of input files 
inputdir = "/Location of directory that contains files" 

#create output file 
outputfilename = 'outputfilename' 
outputfile = "/Location to put output file/"+basename(outputfilename)[:-4]+".pkt" 
ofile = open(outputfile, 'wb') 

for path, dirs, files in os.walk(inputdir): 
    files_list = glob(os.path.join(inputdir, '*.h5')) 
    for file in files_list: 
     f = h5py.File(os.path.join(files_list,file), 'r') 
     f.close() 
    #for loop performing the necessary task to the information in the files 
    #print that the output file was written 
    print "Wrote " + outputfile 
#close output file 
ofile.close() 

Этот код создает выходной файл с именем outputfile.pkt

Как настроить этот код для внесения изменений, которые я ранее указывал?

+0

Вы можете использовать 're' и (необязательно)' time.strptime' для анализа дат во входных именах файлов. Если у вас есть имя выходного файла, вы можете открыть его для записи напрямую или переименовать его после того, как вы написали его в 'outputfile.pkt'. – pts

+0

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

+1

можете ли вы предоставить несколько примеров имен файлов? – jaime

ответ

0

time.strptime может анализировать любой формат времени, который вы хотите, time.strftime может генерировать любой желаемый формат времени. Вы должны прочитать (и, возможно, разобрать) все из них, и использовать min(...) и max(...), чтобы получить самый маленький и самый большой.

Например, если имена файлов выглядят как foo2014-06-16bar.txt и hello2014-06-17world, то здесь, как разобрать их:

import re 
files = ['foo2014-06-16bar.txt', 'hello2014-06-17world' 
dates = [re.search(r'(?:19|20)\d{2}-\d{2}-\d{2}', f).group() for f in files] 
print min(dates) #: 2014-06-16 
print max(dates) #: 2014-06-17 

Вот как построить files с помощью os.walk:

import os 
inputdir = "/Location of directory that contains files" 
files = [] 
for dirpath, dirnames, filenames in os.walk(inputdir): 
    for filename in filenames: 
    if filename.endswith('.h5'): 
     pathname = os.path.join(dirpath, filename) 
     files.append(pathname) 
print files 
+0

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

+0

. Что не так с созданием списка '' '' '' файлов сначала и только то делаете то, что делаете в вопросе? Когда у вас есть список 'files', вы можете перебирать его, вам не нужно снова сканировать файловую систему. – pts

+0

Я пробовал os.listdir, но он не работает. Я не могу набрать имя 145 файлов. Этот код должен быть способен перебирать любой каталог файлов, которые я им даю, а не только определенные файлы, на которые я смотрю сейчас. –

Смежные вопросы