使用python将文件列表添加到字典中

时间:2015-11-24 12:51:34

标签: 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()

及其工作,但问题是我希望用户只输入一个数字或一个字母来打开文件,而不是写出文件的全名。任何想法?

感谢。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

您可以创建一个字典,其中包含值作为文件的名称和密钥,无论您希望它是什么。根据用户输入,检查密钥是否存在,并打开相应的文件名值。

答案 2 :(得分: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)

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