到目前为止,这是我的代码,它是一个基于文本的文件浏览器。用户通过选择分配的号码来选择要浏览的驱动器或目录。运行脚本时,它会显示从0到任意数量的项目的输出。但是当显示文件夹的内容时,它会从1开始列出,这会抛弃您的选择。
from os import listdir
import win32api
#need help with this block
def glist(path):
global nlist
nlist = []
for i in listdir(path):
nlist.append(i)
countf=len(nlist)
print str(countf) + " " + str(i)
def getfiles(dir, filename):
for i in listdir(dir):
newtext=open(filename,'a')
newtext.write("\n"+ "\n" + i)
newtext.close()
def getdrives():
global drives
drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
for index, item in enumerate(drives):
print index, item
print "Select which drive to work with: "
getdrives()
x = raw_input("Which Drive:")
glist(drives[int(x)])
y = raw_input("Select Folder: ")
glist(drives[int(x)] + nlist[int(y)])
答案 0 :(得分:1)
写得更好:
def glist(path):
global nlist
for idx, name in enumerate(listdir(path)):
print '{} {}'.format(idx, name)
nlist.append(name)
但是会重新考虑使用global
并从中返回一个列表......
答案 1 :(得分:0)
列表的长度比该列表中的最大索引多一个。
def glist(path):
global nlist
nlist = []
for i in listdir(path):
nlist.append(i)
# Just subtract 1
countf=len(nlist) - 1
print str(countf) + " " + str(i)
也就是说,在每次迭代时重新计算列表的长度可能很昂贵,特别是当你知道它在每一步增长1时。你可以通过enumerate
免费获得countf(当然,它是零索引的)。
def glist(path):
global nlist
nlist = []
for countf, i in enumerate(listdir(path)):
nlist.append(i)
print str(countf) + " " + str(i)