python3

时间:2016-08-18 14:24:48

标签: python file-processing

我正在创建一个函数,以递归方式在目录中搜索具有特定后缀的文件。

  

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)

如果它看起来很奇怪,我在格式化方面遇到了一些麻烦。

1 个答案:

答案 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