2015-12-14 2 views
1

Я пытаюсь написать скрипт python с несколькими текстовыми файлами внутри подкаталога, например.argparse: доступ ко всем файлам в подкаталоге

python script.py --inputdir ~/subdirectory 

который выполнит каждый файл внутри этого подкаталога. Как можно использовать argparse для этого? Должны ли вы писать функцию для доступа и открытия каждого файла?

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument("--inputdir", help="path to your subdirectory", 
        required=True) 
args = parser.parse_args() 

Теперь, что мне делать с args.inputdir? Как извлечь файлы?

+0

Определить «выполнить» - вы имеете в виду «для каждого файла, сделайте ./file», вы хотите, чтобы python импортировал каждый файл в сеанс интерпретатора или вам нужно сначала вызвать исполняемый процесс (например, ./my_script.sh'; 'python my_file.py')? –

ответ

0

Это не работа argparse.

Использовать os.walk для рекурсивно итерации файлов.

import os 

for parent, dirnames, filenames in os.walk(args.inputdir): 
    for fn in filenames: 
     filepath = os.path.join(parent, fn) 
     with open(filepath) as f: 
      # Do something with `f` 
+1

Я думаю, 'os.walk (args.inputdir)' должен работать – ShanZhengYang

+0

@ShanZhengYang, Спасибо за отзыв. Я аккуратно обновил ответ. – falsetru

0

Как можно использовать argparse, чтобы сделать это? Должны ли вы писать функцию для доступа и открытия каждого файла?

Это звучит скорее всего, поскольку argparse не должен действительно знать, что делать с аргументами командной строки - как их получить. Это, вероятно, выглядит примерно так:

def process_file(filename): 
    with open(filename, 'r') as file_input: 
     pass # do something here . . . 

def process_directory(directory_name): 
    for filename in os.listdir(directory_name): 
     process_file(os.path.join(directory_name, filename)) 

process_directory(args.inputdir) 

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

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