使用 os.walk 在目录中移动并执行脚本

Using os.walk to move through a directory and execute a script

目前我正在做一个项目,该项目将包含许多文件夹并将每个文件夹的内容合并到一个 pdf 文件中。这意味着每个文件夹将输出一个 pdf。我能够弄清楚如何使用 ReportLab 将我正在使用的文件合并到一个单独的 pdf 中。现在我需要让它遍历每个文件夹并创建一个 pdf。到目前为止,我可以通过我的测试目录使用 os.walk 到 运行 但它不会 运行 pdf 脚本。

import glob
import os
import re
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Image, PageBreak
from reportlab.lib.units import inch

list_of_files = ["C:\foo_1", "C:\foo_2"]    

os.chdir("C:\foo")
for root, dirs, files in os.walk(".", topdown = False):
   for name in files: 
      print(os.path.join(root, name)) #used to see where os.walk is working
      def sorted_nicely( l ):
        """ 
        
        Sort the given iterable in the way that humans expect.
        """ 
        convert = lambda text: int(text) if text.isdigit() else text 
        alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
        return sorted(l, key = alphanum_key)

      def collect_issue(fname):
            if not fname.endswith(".pdf"):
                fname += ".pdf"
                doc = SimpleDocTemplate(fname,pagesize=letter,
                                        rightMargin=0,leftMargin=0,
                                        topMargin=0,bottomMargin=0)
                width = 7.5*inch
                height = 9.5*inch    

                picture_file_names = sorted_nicely(glob.glob("*.jp2"))
                contents = []
                for pic_fname in picture_file_names:
                    im = Image(pic_fname, width=width, height=height)
                    contents.append(im)
                    contents.append(PageBreak())
                doc.build(contents)

      if __name__ == "__main__":
            collect_issue("test")

我正在寻找使用 os.walk 的帮助,以便通过我需要的许多文件夹获取 pdf 脚本 运行。我也不完全确定到底是什么导致它不起作用。作为参考,很多这段代码都是基于 this script

这是一个整体不雅的解决方案,但它足以解决我最初的问题。

import glob
import os
import re
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Image, PageBreak
from reportlab.lib.units import inch


os.chdir("C:\Foo")
file_num = 0
for root, dirs, files in os.walk(".", topdown = False):
    def collect_issue(fname):
        if not fname.endswith(".pdf"):
            fname += ".pdf"
            doc = SimpleDocTemplate(fname,pagesize=letter,
                  rightMargin=0,leftMargin=0,
                  topMargin=0,bottomMargin=0)
            width = 7.5*inch
            height = 9.5*inch    

            contents = []
            print(root)
            for name in files: 
                im = Image(root + "\" + name, width, height)

                contents.append(im)
                contents.append(PageBreak())
            if contents:
                doc.build(contents)       

    collect_issue("test" + str(file_num))
    file_num += 1