2015-11-24 73 views
0

我编写了此脚本,它将显示特定目录中的所有文件,并让用户输入他想要编辑的文件。使用python将文件列表添加到字典中

import os 

path = "/home/luai/Desktop/python/test" 
dirs = os.listdir(path) 

print "Here is a list of all files: " 

for files in dirs: 
    print files 

filename = raw_input ("which file to update: ") 
if filename in dirs: 
    inputFile = open(filename, 'r') 
else: 
    print "no match found" 
    sys.exit() 
    inputFile.close() 

和工作,但事情是,我希望用户只输入数字或字母开的,而不是写文件的全名的文件。有任何想法吗 ?

谢谢。

+2

难道你不是基本上在标题中回答自己的问题吗? – luk32

+0

@ luk32是的,但它没有工作,必须有一些即时做错的事情,但我还没有算出它是什么呢 – leaker

+0

你甚至没有尝试使用'字典'呢。尝试一下,然后提出一个实际的问题。 “有任何想法吗?”这不是一个很好的问题。特别是你错过了任何明确的问题陈述。 – luk32

回答

1

我只想在与索引的listdir输出回路:

import os 

path = "/home/luai/Desktop/python/test" 
dirs = os.listdir(path) 

print "Here is a list of all files: " 

for filenumber in range(len(dirs)): 
    print filenumber, dirs[filenumber] 

filenumber = raw_input ("Number of file which to update: ") 
filenumber = int(filenumber) 

if dirs[filenumber] in dirs: 
    inputFile = open(os.path.join(path, dirs[filenumber])) 
    inputFile.close() #this line was at a weird place? 
else: 
    print "no match found" 
    sys.exit() 

但是,这仍然有listdir还为您提供目录的问题,你不能open那些。 所以最好的是只从path获得文件。

import os 

path = "/home/luai/Desktop/python/test" 
files = os.walk(path).next()[2] 


print "Here is a list of all files: " 

for filenumber in range(len(files)): 
    print filenumber, files[filenumber] 

filenumber = raw_input ("Number of file which to update: ") 
filenumber = int(filenumber) 

if files[filenumber] in files: 
    inputFile = open(os.path.join(path, files[filenumber])) 
    inputFile.close() 
else: 
    print "no match found" 
    sys.exit() 
+0

谢谢解决问题 – leaker

0

您可以创建一个字典,其中包含值作为文件名和密钥的任意位置。根据用户输入,检查密钥是否存在,并打开相应的文件名称值。

0

鲁本有正确的想法,但它可以多一点优雅:

chosen_file_index = -1 # Intentionally invalid index 

while chosen_file_index not in range(0, len(filenames)-1): 

    filenames = os.listdir(path) 

    if not filenames: 
      print "No files found" 
      break 

    for file_index, filename in enumerate(filenames): 
     print "{index}. {filename}".format(index=file_index, filename=filename) 

    chosen_file_index = raw_input("Which file to update:") 

chosen_filename = filenames[chosen_file_index) 

所以在这里我添加的想法,系统会不断地问,直到用户选择从列表中的有效条目并处理了没有文件的情况。

+0

我喜欢它,但它仍然有目录,所以在稍后会导致错误 – Noxeus

+0

是的,我看到你将这个添加到你的答案,但他没有真正问这个问题,所以我不想在答案中添加太多东西。接得好。 –

相关问题