我正在创建一个函数,以递归方式在目录中搜索具有特定后缀的文件。
TypeError:切片索引必须是整数或无或具有索引方法
指着这一行:
如果path.endswith('。',sf)== True:l.append(path)
.endswith()返回一个布尔值,用于测试字符串,为什么它会给我带来关于非整数的问题呢?
我还决定只打印所有内容并抛出一个try / except语句,如果一个文件不是一个目录或一个文件(导致这种情况很快发生在第一次运行中)。它运行了一两分钟,然后开始吐出except子句
/ sys / bus / cpu / devices / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 /出了问题NODE0 / CPU0 / NODE0 / CPU0 / NODE0 / CPU0 / NODE0 / CPU0 / NODE0 / CPU1 / NODE0 / CPU0 / NODE0 / CPU1 /子系统/设备/ CPU0 / NODE0 / CPU0 /子系统/设备/ CPU0 /子系统/设备/ CPU0 /子系统出错了/ sys / bus / cpu / devices / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu1 / node0 / cpu0 / node0 / cpu1 / subsystem / devices / cpu0 / node0 / cpu0 / subsystem / devices / cpu0 / subsystem / devices / cpu0出错/ sys / bus / cpu / devices / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / cpu0 / node0 / CPU0 / NODE0 / CPU0 / NODE0 / CPU0 / NODE0 / CPU1 / NODE0 / CPU0 / NODE0 / CPU1 /子系统/设备/ CPU0 / NODE0 / CPU0 /子系统/设备/ CPU0 /子系统/设备/ CPU1 /高速缓存/功率
好吧,我只是按Ctrl-Z再次回到ipython3并再次尝试,即使指定的目录为/,也立即显示相同的消息。为什么它会在同一地区重新开始?
编辑:代码
def recursive_search(dr, sf):
"""searches every potential path from parent directory for files with the matching suffix"""
l=[]#for all the good little scripts and files with the right last name
for name in os.listdir(dr):#for every item in directory
path=os.path.join(dr, name)#path is now path/to/item
if os.path.isfile(path):
if path.endswith('.',sf)==True:
l.append(path)
else:
#try:
recursive_search(path, sf)
#except:
#print ('something went wrong with ', path)
如果它看起来很奇怪,我在格式化方面遇到了一些麻烦。
答案 0 :(得分:0)
查看str.endswith
的文档:
>>> help(str.endswith)
Help on method_descriptor:
endswith(...)
S.endswith(suffix[, start[, end]]) -> bool
Return True if S ends with the specified suffix, False otherwise.
With optional start, test S beginning at that position.
With optional end, stop comparing S at that position.
suffix can also be a tuple of strings to try.
所以调用"path".endswith('.',"py")
检查字符串path
是否以"."
结束,从indice "py"
开始检查,但"py"
是".py"
不是一个有效的指标,因此错误。
要检查字符串是否以path.endswith("."+sf)
结尾,您需要将字符串一起添加,而不是将其作为另一个参数传递:
Use Host GPU