Python脚本循环读取HTML文件时文件名打印错误求助
问题分析与解决
你遇到的文件名错位问题,根源在于变量更新的顺序错误。我们拆解下你的代码逻辑就能找到问题:
- 初始
n=1,filename是source1.html - 进入循环后,你先执行了
n = n+1,立刻把filename改成了source2.html - 这时候你打开的还是最初的
source1.html,但后续打印、写入的却是已经更新后的source2.html - 以此类推,处理
source2时文件名已经跳到source3,处理source3时跳到source4,最终就出现了打印的文件名比实际处理的文件多一位的情况。
修正后的代码
from bs4 import BeautifulSoup import re import os.path n = 1 filename = "source"+str(n)+".html" savefile = open('OUTPUT.csv', 'w') while os.path.isfile(filename): # 先处理当前文件名对应的文件 strjpgs = "Extracted Layers: \n \n" file = open(filename, "r") soup = BeautifulSoup(file, "html.parser") thedata = soup.find("div", class_="cplayer") strdata = str(thedata) DoRegEx = re.compile('/([^/]+)\.jpg') jpgs = DoRegEx.findall(strdata) strjpgs = strjpgs + "\n".join(jpgs) + "\n \n" # 写入并打印当前正在处理的文件名 savefile.write(filename + '\n') savefile.write(strjpgs) print(filename) print(strjpgs) # 最后更新变量,为下一次循环做准备 n = n+1 filename = "source"+str(n)+".html" savefile.close() print("done")
关键改动说明
- 把
n和filename的更新逻辑移到了当前文件处理完成之后,这样打印和写入的都是正在处理的真实文件名,不会提前跳转到下一个。 - 顺便修正了最后一行
print "done"的语法错误(Python 3中print是函数,需要加括号),避免运行时抛出语法异常。
内容的提问来源于stack exchange,提问作者Chagger
相关产品推荐
相关产品推荐

