我写了这个脚本,它将显示特定目录中的所有文件,并让用户输入他想要编辑的文件。
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()
及其工作,但问题是我希望用户只输入一个数字或一个字母来打开文件,而不是写出文件的全名。任何想法?
感谢。
答案 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)
所以在这里我添加了一个想法,即系统会一直询问,直到用户从列表中选择一个有效的条目,并处理没有文件的情况。