使用os.walk遍历目录并执行脚本

时间:2018-11-05 18:40:50

标签: python python-3.x pdf reportlab os.walk

当前,我正在一个项目中,该项目将容纳许多文件夹,并将每个文件夹的内容合并为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 ):
        """ 
        http://stackoverflow.com/questions/2669059/how-to-sort-alpha-numeric-set-in-python
        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

1 个答案:

答案 0 :(得分:0)

这是一个总体上不太理想的解决方案,但它足以解决我原来的问题。

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