2017-01-30 15 views
0

Я хочу:Python аргумент командной строки, который принимает в каталоге и выводит список файлов

Как говорит название,

запустить что-то такое, как:

python3 program.py [~/главная/мне/Документы/*. TXT]

и я хотел бы получить

[ 'text1.txt', 'text2.txt', ..., 'textn.txt']

Solutions Я нашел в Интернете:

Много решений я нашел в Интернете с помощью включенных fileinput.input() и sys.argv. Проблема в том, что я неправильно реализую эти решения (я полный noob на Python).

Вот наиболее перспективное решение:

Source

import fileinput 
for line in fileinput.input(): 
    process(line) 

, но он продолжает говорить мне, что «процесс не определен» - - Я до сих пор найти решение.

Другим решением является sys.argv [0]. но он продолжает говорить мне, что индекс списка выходит за пределы диапазона.

EDIT: This Решение не переходит к аргументу командной строки для python. Это то, с чем я в основном испытываю проблемы.

+0

Возможный дубликат [Как перечислить все файлы каталога в Python] (http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a -directory-in-python) –

+1

@barakmanos Привет, Barak, это решение не переместило каталоги в качестве аргументов командной строки, к сожалению. У меня в основном возникают проблемы. – Adam

+0

Вы получаете ошибку буквально, потому что 'process' не определен. Может быть, 'print (line)' будет делать трюк для вас здесь. – spicypumpkin

ответ

0

Это работает для меня:

import os 
import sys 

def getfilenames(path): 
    ftype = path.split(".")[-1] 
    folder = path.split("*")[0] 
    return [i for i in os.listdir(folder) if ftype in i.split(".")[-1]] 

print(getfilenames(sys.argv[1])) 

указать путь в виде строки:

python example.py "/path/to/file/*.type" 
+1

Привет @Tristan, я продолжаю получать ошибку «индекс индекса вне диапазона» для «print (getfilenames (sys.argv [1]))« Я бы разместил целое число в argv [], чтобы удовлетворить количество файлов в каталоге? – Adam

+0

Привет @Adam. Список argv содержит список аргументов командной строки, переданных скрипту python. argv [0] - это имя скрипта, а путь должен быть argv [1]. Вы указали путь в качестве аргумента? EDIT: argv [1] присутствует только в том случае, если вы выполняете сценарий по командной строке, как в моем примере. Если вы не хотите запускать его по командной строке getfilenames ("/ path/*. Txt") – Tristan

+0

К сожалению, как только я запустил его, он дал мне ошибку «индекс индекса вне диапазона». Так что, если я хочу сделать «python3 program.py ~/home/name/*. Txt», это не сработает? – Adam

0

вы можете комбинировать ответы, представленные в how to list all files of a directory и command line arguments in python , чтобы создать что-то вроде этого:

import sys 
from os import walk 

path = sys.argv[1] 
files = [] 
for (dirpath, dirnames, filenames) in walk(path): 
    files.extend(filenames) 
print (files) 

и r ип это с

python3 listdir.py $PWD 
+0

Привет @Asad, к сожалению, он должен быть «python3 listdir.py ~/name/file/file2/*. Txt» format – Adam

+0

обновил фрагмент кода, совместимый с python3. Позвольте мне знать, если это помогает. ah nvm, я думаю, что мне не хватает классификатора типов. починю – Asad

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

  • Нет связанных вопросов^_^