2009-08-13 181 views
1
class __init__: 
    path = "articles/" 
    files = os.listdir(path) 
    files.reverse() 

    def iterate(Files, Path): 

     def handleXml(content): 

      months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 

      parse = re.compile('<(.*?)>(.*?)<(.*?)>').findall(content) 
      day = parse[1][1] 
      month = months[int(parse[2][1])] 
      dayN = parse[3][1] 
      year = parse[4][1] 
      hour = parse[5][1] 
      min = parse[6][1] 
      amPM = parse[7][1] 
      title = parse[9][1] 
      author = parse[10][1] 
      article = parse[11][1] 
      category = parse[12][1] 

     if len(Files) > 5: 
      del Files[5:] 

     for file in Files: 
      file = "%s%s" % (Path, file) 
      f = open(file, 'r') 
      handleXml(f.read()) 
      f.close() 

    iterate(files, path) 

它在启动时运行,并且如果我检查文件数组,它包含所有文件名。 但是,当我循环他们,他们只是不工作,只显示第一个。 如果我返回文件,我只会得到前两个,如果我甚至在重复文件中返回解析,它也不相同。 这没有任何意义。Python循环读取和解析目录中的所有文件

我想使用Python做一个简单的博客,并且因为我的服务器有一个非常旧的Python版本我不能使用像glob这样的模块,所有事情都需要尽可能基本。

files数组包含目录中的所有文件,这对我来说已经足够了。我不需要浏览articles目录中的其他目录。

但是,当我尝试输出解析,即使在重复的文件我得到不同的结果。

感谢,

  • 汤姆
+0

您发布的代码不会调用iterate()函数,也不会打印任何内容。请发布完整的代码。 – 2009-08-13 15:35:14

+0

此外,缩进看起来是错误的,这在Python中显然非常重要。请尝试修复它,使其看起来与您在文本编辑器中的效果完全相同。 – 2009-08-13 15:36:27

回答

1

难道是因为:

del Files[5:] 

它从原来的列表中删除最后5项为好。除了使用del的,你可以尝试:

for file in Files[:5]: 
    #... 
+0

没有工作,但很好的方式删除两行并保留原始数组。 谢谢 – Tom 2009-08-14 20:44:58

0

正如评论指出,实际的递归丢失。
即使它在代码的其他地方存在,递归调用也是事情发生错误的典型地方,为此我建议您仔细检查一下。

但是,为什么不使用os.walk?它遍历所有路径,而不需要重新创建(递归)轮。但是,它已经在2.3版本中引入了,我不知道你的Python是多大年纪。

+0

我的阵列不是问题,它是别的。如果我打印数组,它会显示所有文件。 – Tom 2009-08-14 20:54:46

+0

你可以检查一下阵列的长度吗?我问,因为有可能你有一个1-2个字符串元素的数组,所有文件名都以空格分隔。 – 2009-08-15 01:18:05

相关问题