2014-12-01 5 views
1

У меня есть сценарий Python, который я написал, который отображает данные из двух разных файлов. У меня есть несколько пар файлов, над которыми мне нужно запустить этот скрипт. (Возьмите «несколько пар», чтобы обозначить потенциально тысячи.) В подобном скрипте, который отображает данные из одного файла, я использовал glob.glob с большим успехом. В этом случае я хотел бы сделать что-то подобное.Использование glob дважды в скрипте Python

Мой вопрос два раза:

  1. мне нужно определить отдельную функцию для каждого glob.glob ли?
  2. Могу ли я установить второй glob.glob в цикле for, который я использовал в случае с одним файлом данных, как показано здесь?

    def process_file(my_file): 
    
    (# The body of my code... not relevant, and not something I can share. 
    
    if __name__=='__main__': 
        import glob 
        for f in glob.glob(file_directory + "*_data.dat"): 
         process_file(f) 
         print f 
    

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

+1

Не совсем понятно, что вы пытаетесь сделать. Вы можете использовать 'glob.glob()' столько раз, сколько хотите, как и любая другая функция. Создайте [MCVE] (http://stackoverflow.com/help/mcve), чтобы лучше проиллюстрировать, что вы хотите сделать. – MattDMo

+0

@MattDMo У меня нет времени на создание MCVE. Мне просто нужно знать, могу ли я использовать glob.glob() в цикле for, и если мне нужно будет определить отдельную функцию для каждого glob.glob(). Это похоже на довольно универсальный вопрос, а не на тот, который требует примера. –

+1

@ Palmetto_Girl86: Просто сделай это. Если это не сработает, вы можете начать задавать вопросы о том, почему это не работает, или как заставить его работать. Люди из StackOverflow обычно не заинтересованы в ответе на вопросы, на которые вы могли бы ответить, просто запустив свой код. – BrenBarn

ответ

2

Чтобы попытаться ответить на ваши вопросы

«Мне нужно определить отдельную функцию для каждого glob.glob делать?»

Это зависит от того, нужно ли делать то же самое для обоих типов файлов? В этом случае просто используйте ту же функцию. В противном случае, если операции совершенно разные, у вас должно быть две разные функции.

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

def process_file(file_path, file_type): 
    # mostly the same stuff 
    ... 
    if file_type == 'a': 
     # something different 

«Могу ли я гнездо второй Глоб. glob внутри цикла for, который я использовал в случае с одним файлом данных, показанном здесь? "

Вы могли бы сделать. Если предположить, что имена файлов пар файлов несколько связанных вы могли бы иметь что-то вроде:

for f_a in glob.glob(file_directory + "*_data_a.dat"): 
    process_file(f_a, 'a') 
    for f_b in glob.glob(file_directory + f_a[:-11] + "_data_b.dat"): 
     # we only ever expect to find one item to loop over here though 
     process_file(f_b, 'b') 

Но в этом случае внутренняя Глоб бессмысленно ... мы построили все имя файла в нашем питона коде и может просто сделать :

for f_a in glob.glob(file_directory + "*_data_a.dat"): 
    process_file(f_a, file_type='a') 
    process_file(file_directory + f_a[:-11] + "_data_b.dat", file_type='b') 

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

import os 

for f_a in glob.glob(file_directory + "*_data_a.dat"): 
    process_file(f_a, file_type='a') 
    f_b = file_directory + f_a[:-11] + "_data_b.dat" 
    if os.path.isfile(f_b): 
     process_file(f_b, file_type='b') 
+0

спасибо! Это та помощь, которую я искал. И я начинаю понимать, почему я пытался ошибаться. Спасибо за предложение. Это именно то, что я искал! –