Python循环读取并解析目录中的所有文件
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]:
#...