Python使用os.walk生成图片HTML仅显示最后一个文件问题咨询
问题核心原因
- 你在遍历文件时已经把所有图片的相对路径存入了
file_set集合,但生成HTML中间段的代码只使用了循环结束时最后一次赋值的relativeFiles变量,没有遍历所有已收集的路径生成对应的<img>标签 - 代码存在多处变量名拼写错误:定义了
imageD却在后续用imageDir,定义了outputDir却在写入时用outDir - 输出文件路径拼接错误:
'C:/pictures' + 'images.html'会生成C:/picturesimages.html,缺少路径分隔符 <img>标签的width属性拼写错误为widht
修正后的完整代码
import sys, os # 接收用户传入的图片目录路径 image_dir = sys.argv[1] base_name = os.path.basename(image_dir) # 修正输出路径拼接,添加路径分隔符 output_path = 'C:/pictures/images.html' file_set = set() # 遍历获取所有图片的相对路径 for root, dirs, files in os.walk(image_dir): for i in files: # 计算图片文件相对于输出HTML文件的路径 relative_path = os.path.relpath(root, os.path.dirname(output_path)) relative_file = os.path.join(relative_path, i) file_set.add(relative_file) # 生成HTML头部 start_html = '''<!DOCTYPE html> <html> <body> <h1>{}</h1> '''.format(base_name) # 遍历所有收集到的图片路径,批量生成img标签 middle_html = '' for img_path in file_set: middle_html += ' <img src="{}" width="100" height="100">\n'.format(img_path) # 生成HTML尾部 end_html = ''' </body> </html> ''' # 写入文件 with open(output_path, 'w', encoding='utf-8') as outf: outf.write(start_html) outf.write(middle_html) outf.write(end_html)
修改说明
- 修正了所有变量名拼写不统一的问题,避免调用未定义变量报错
- 调整相对路径计算逻辑,使用遍历到的文件所在目录
root计算相对路径,而非固定用传入的根目录,保证子目录下的图片也能正常寻址 - 新增循环遍历
file_set生成所有图片对应的<img>标签,把所有标签拼接后再写入HTML - 修正了输出路径拼接错误和属性拼写错误
- 新增文件写入时的编码指定为utf-8,避免中文路径或标题乱码
内容的提问来源于stack exchange,提问作者Ellie
相关产品推荐
相关产品推荐

