在Python中遍历子目录并保存到相同的子目录

时间:2014-06-12 13:45:26

标签: python glob os.walk xlsxwriter

首先感谢阅读本文。我在Python中的子目录行走(然后保存)有点困难。我下面的代码能够依次遍历每个子目录并处理文件以搜索某些字符串,然后我生成一个xlsx文件(使用xlsxwriter)并将我的搜索数据发布到Excel。

我有两个问题......

我遇到的第一个问题是我想在每个目录中处理一个文本文件,但是每个子目录的文本文件名都不同,所以我不想指定'Textfile.txt',而是想做*之​​类的事情。 txt(我会在这里使用glob吗?)

第二个问题是,当我打开/创建Excel时,我想将文件保存到找到并处理.txt文件的同一子目录中。目前我的Excel保存到python脚本目录,因此每次打开和处理新的子目录时都会被覆盖。最后将Excel保存到子目录是否更明智,还是可以从一开始就使用当前子目录路径创建?

这是我的部分工作代码......

for root, subFolders, files in os.walk(dir_path):
    if 'Textfile.txt' in files:
        with open(os.path.join(root, 'Textfile.txt'), 'r') as f:

            #f = open(file, "r")    
            searchlines = f.readlines()
            searchstringsFilter1 = ['Filter Used          :']
            searchstringsFilter0 = ['Filter Used          : 0']

            timestampline = None
            timestamp = None
            f.close()

            # Create a workbook and add a worksheet.
            workbook = xlsxwriter.Workbook('Excel.xlsx', {'strings_to_numbers': True})
            worksheetFilter = workbook.add_worksheet("Filter")

再次感谢您查看此问题。

MikG

2 个答案:

答案 0 :(得分:1)

我不会完全解决您的代码,但这里有提示:

  

文本文件名因子目录而异,因此不是指定' Textfile.txt'我想做* .txt

之类的事情

您可以列出目录中的所有文件,然后检查文件扩展名

for filename in files:  
  if filename.endswith('.txt'):  
    # do stuff

同样在创建woorkbook时,你能输入路径吗?你有根,对吗?为什么不使用它?

答案 1 :(得分:0)

你不想要glob,因为你已经在files变量中有一个文件列表。因此,过滤它以查找所有文本文件:

import fnmatch
txt_files = filter(lambda fn: fnmatch.fnmatch(fn, '*.txt'), files)

将文件保存在同一子目录中:

outfile = os.path.join(root, 'someoutfile.txt')