2014-11-18 2 views
2

Я написал три простых сценария (которые я не буду публиковать здесь, так как они являются частью моего диссертационного исследования), которые находятся в рабочем состоянии.Python - «пакетная обработка» нескольких существующих скриптов

Что я хотел бы сделать сейчас, это написать для них сценарий «пакетной обработки». У меня много (как потенциально десятки тысяч) файлов данных, на которых я хочу, чтобы эти скрипты действовали.

Мои вопросы об этом процессе являются следующие:

  1. Что является наиболее эффективным способом идти о такого рода вещи?
  2. Я относительно новичок в программировании. Есть ли простой способ сделать это, или это очень сложная работа?

Перед тем, как кто-нибудь опустит этот вопрос как «не проверенный» или какой-либо негативный оттенок приходит на ум, ПОЖАЛУЙСТА, просто предложите помощь. Я провел дни, читая документацию, и следил за поисками в Google, и было бы очень полезно, если бы человек мог внести свой вклад.

+0

Как следует запускать скрипты? Первый скрипт для всех файлов, второй скрипт для всех файлов, третий скрипт для всех файлов; или все три в первом файле, все три на втором файле, ...? –

+0

Что вы подразумеваете под "самой эффективной"? Если вы имеете в виду время, тогда нам нужно будет узнать намного больше о том, что делают ваши сценарии и как они подключаются, а также о том, где и как они проводят свое время, а не только о том, что они существуют. – abarnert

+0

@ EthanFurman, это действительно не имеет значения. Они независимы друг от друга, но в какой-то момент все три сценария должны запускаться во всех файлах. –

ответ

2

Если вам просто нужно запустить скрипты, возможно, сценарий оболочки будет проще всего.

Если вы хотите остаться в Python, лучшим способом будет иметь функцию main() (или сконвертировано) в каждом сценарии (и у каждого сценария ввозу), имеют ввозных пакетный сценарий индекс, а затем запустить его main.

При проживании в Python: - ваш три сценарий должен иметь .py окончание быть ввозом - они должны быть либо в пути поиска Питона, или сценарий пакетного управления может установить путь - они должны каждый иметь main функция (или любое имя вы выбрали), который активирует этот сценарий

Например:

batch_script

import sys 
sys.path.insert(0, '/location/of/subscripts') 

import first_script 
import second_script 
import third_script 

first_script.main('/location/of/files') 
second_script.main('/location/of/files') 
third_script.main('/location/of/files') 

пример sub_script

import os 
import sys 
import some_other_stuff 
SOMETHING_IMPORTANT = 'a value' 

def do_frobber(a_file): 
    ... 

def main(path_to_files): 
    all_files = os.listdir(path_to_files) 
    for file in all_files: 
     do_frobber(os.path.join(path_to_files, file) 

if __name__ == '__main__': 
    main(sys.argv[1]) 

Таким образом, ваш индекс может работать самостоятельно, или вызывается из основного сценария.

+0

Мне нужно остановиться в Python. Что вы имеете в виду, когда каждый сценарий импортируется? Это что-то, что нужно сделать для файла .py? –

+1

@ Palmetto_Girl86: '.py' файлы являются импортируемыми, но они также должны быть доступны для Python (что означает путь поиска Python). Таким образом, пакетный скрипт должен иметь возможность сказать 'import script1' * и иметь для него ваш первый скрипт. * 'script1' должен быть вашим фактическим именем скрипта. –

+0

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

2

Вы можете написать пакетный скрипт в python с помощью os.walk(), чтобы сгенерировать список файлов, а затем обрабатывать их один за другим с помощью существующих программ python.

import os, re 

for root, dir, file in os.walk(/path/to/files): 
    for f in file: 
     if re.match('.*\.dat$', f): 
      run_existing_script1 root + "/" file 
      run_existing_script2 root + "/" file 

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

EDIT. - добавил регулярное выражение, чтобы обеспечить только файлы, заканчивающиеся " .dat "обрабатываются.

+0

Простите мое невежество, но что такое регулярное выражение? –

+0

Регулярное выражение – Eenvincible

+2

@ Palmetto_Girl86 - Извините, регулярное выражение является регулярным выражением и используется для сопоставления строковых шаблонов. Вы можете использовать их в python с модулем 're' [(link)] (https://docs.python.org/2/library/re.html). Я буду обновлять свой ответ, чтобы включить его в качестве примера. –

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