Python循环读取并解析目录中的所有文件

1 投票
2 回答
2978 浏览
提问于 2025-04-15 13:35
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版本太旧,不能使用像glob这样的模块,所以我需要尽量保持简单。

文件数组里包含了目录下的所有文件,这对我来说已经足够了。我不需要去查看文章目录里的其他子目录。

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

谢谢,

  • 汤姆

2 个回答

0

正如评论中提到的,实际的递归部分缺失了。
即使在代码的其他地方有递归调用,通常出错的地方就是递归调用,所以我建议你仔细检查一下。

不过,为什么不试试 os.walk 呢?它可以遍历所有路径,不需要你自己重新发明(递归)这个轮子。这个功能是在2.3版本中引入的,不过我不知道你用的Python版本有多旧。

1

这可能是因为:

del Files[5:]

它也会从原始列表中删除最后的5个条目。与其使用 del,你可以试试:

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

撰写回答