Выбор файла из указанного каталога в Python - PullRequest
0 голосов
/ 07 декабря 2011

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

import os
path="/root/Desktop"
dirList=os.listdir(path)
for fname in dirList:
    print fname

selected = raw_input("Select a file above: ")

Что мне делать?

Пример:

http://img502.imageshack.us/img502/4407/listingy.png

Заранее спасибо ..

Ответы [ 6 ]

2 голосов
/ 07 декабря 2011

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

import os

path="/root/Desktop"
dirList=os.listdir(path)

for i, fname in enumerate(dirList):
    print "%d) %s" % (i + 1, fname)

while True:
    try:
        selectedInt = int(raw_input("Select a file above: "))
        selected = dirList[selectedInt - 1]
        break
    except Exception:
        print "Error: Please enter a number between 1 and %d" % len(dirList)
1 голос
/ 07 декабря 2011
for i, fname in enumerate(dirList):
    print "%s) %s" % (i + 1, fname)

selectedInt = int(raw_input("Select a file above: "))
selected = dirList[selectedInt - 1]

Однако учтите, что исправление ошибок не выполняется.Вы должны ловить случаи, когда ввод не является целым числом.

0 голосов
/ 07 декабря 2011

Создайте словарь, в котором ключ является индексом, а значение - именем файла (используйте enumerate (dirList), чтобы получить кортеж (index, filename) за одну итерацию).Затем просто вытяните соответствующее значение на основе ввода (клавиша).

0 голосов
/ 07 декабря 2011

Попробуйте это:

import os

listed_files = []
for i, fname in enumerate(os.listdir("/root/Desktop")):
    print i, ': ', fname
    listed_files.append(fname)

selected = raw_input("Select a file above: ")
open("/root/Desktop/%s" % listed_files[int(selected)])
0 голосов
/ 07 декабря 2011

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

import os
path="/root/Desktop"
dirList=os.listdir(path)

for index in range(0,len(dirList)):
    print str(index+1) + ": " + dirList[index]

selected = raw_input("Select a file above: ")
print "You selected filename: " + dirList[selected];

редактировать: ой, чтобы замедлить

0 голосов
/ 07 декабря 2011

Вы можете попробовать следующее:

import os
path="/root/Desktop"
dirList=os.listdir(path)
for i in range(0,len(dirList)): # generate an index an loop over it
    print "%d)" % (i+1), dirList[i] # print a selection number matching each file

selected = raw_input("Select a file above: ")
selected = int(selected) # cast the input to int

print "You have selected:", dirList[selected-1] # you can get the corresponding entry!

Это должно сработать:)

...