在Python中遍历子目录并保存在相同子目录中
首先感谢你阅读这个内容。我在使用Python遍历子目录并保存文件时遇到了一些问题。下面的代码可以逐个遍历每个子目录,并处理文件以搜索特定的字符串,然后我用xlsxwriter生成一个xlsx文件,把我的搜索数据放到Excel里。
我有两个问题……
第一个问题是,我想在每个目录中处理一个文本文件,但文本文件的名字在每个子目录中都不一样,所以我不想指定'文本文件.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
你不需要使用glob,因为你已经在files
这个变量里有一份文件列表了。所以,你可以对这个列表进行筛选,找出所有的文本文件:
import fnmatch
txt_files = filter(lambda fn: fnmatch.fnmatch(fn, '*.txt'), files)
如果你想把文件保存在同一个子目录里:
outfile = os.path.join(root, 'someoutfile.txt')
1
我不会完全帮你解决代码问题,但我可以给你一些提示:
文本文件的名字在每个子目录里都不一样,所以与其写死'文本文件.txt',我想用类似*.txt的方式来表示。
你可以列出目录下的所有文件,然后检查文件的后缀名。
for filename in files:
if filename.endswith('.txt'):
# do stuff
另外,在创建工作簿的时候,你能输入路径吗?你有根目录,对吧?那为什么不利用它呢?