2010-08-24 3 views
0

Я пытаюсь, чтобы мой скрипт мог принимать произвольное количество имен файлов в качестве аргументов командной строки. В Unix можно использовать ключ «*» для представления любого символа. Например,Обработка произвольного количества аргументов командной строки в python

ls blah*.txt 

будет перечислять каждый файл с blah в начале и txt в конце.

Мне нужен что-то подобное для моего скрипта python.

python myscript.py blah*.txt 

Возможно ли это? и если да, то как это можно сделать?

+1

Windows или Linux? В Windows у вас более сложное решение включает 2 строки кода. В Linux это уже поддерживается напрямую и тривиально. См. 'Sys.argv' –

ответ

1

Вот почему вы должны sys.argv (и не забудьте import sys) Это вернет всю ваши blah*.txt в виде списка имен файлов

+0

Хмммм. Я не знал, что он справится с этим. Благодаря! – Donovan

0

Существует также fnmatch, если вы не хотите беспокоиться о пути.

0
import sys, glob 
files = reduce(lambda x, y: x + y, (glob.glob(x) for x in sys.argv[1:])) 
2
import sys 

for arg in sys.argv[1:]: 
    print arg 

В Unix-земле, оболочка делает работу глобального масштаба осуществления расширяя аргументы командной строки, поэтому вам не нужно делать это самостоятельно. Если вы последовательно обрабатываете множество файлов, вы также можете посмотреть на fileinput module, который работает как ручка «волшебный ARGV» Perl, а также флаги -n и -i. Это позволяет вам петлю на каждой строке каждого файла, указанного в командной строке, при необходимости перемещения файла резервной копии имени и открытия stdout к оригинальному имени файла, который позволяет сделать что-то простое, как:

import fileinput 

for line in fileinput.input(inplace = True, backup = '.bak'): 
    print fileinput.filelineno() + ": " + line 

в добавьте номер строки в начало каждой строки каждого файла в командной строке, сохраняя оригиналы как filename.bak.

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