解析多个文件 argparse

Posted

技术标签:

【中文标题】解析多个文件 argparse【英文标题】:Parsing Multiple files argparse 【发布时间】:2020-04-09 00:10:14 【问题描述】:

我无法弄清楚如何通过我的程序解析多个文件。截至目前,我可以解析一个单一的文件并毫无问题地填充我的字典。但是我正在努力通过我的脚本解析多个文件。当使用通配符 (*.txt) 包含几个用于解析的文件时,我的程序就像只解析一个文件(假设它是该组中的第一个或最后一个文件)。如何使用我的程序来迭代文件列表而不是单个文件。

下面的代码显示了我的解析参数以及如何将文件传递到__init__

def __init__(self, file):
     self.file = file

def main(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument("-f", "--file", dest="input_file", required = True,
                    help="The binary file to be writen to flash")
    parser.add_argument('file', type=argparse.FileType('wb'), nargs='*')

    args = parser.parse_args(argv)

    fault_finder = FaultList(args.input_file)

if __name__ == '__main__':
    main(sys.argv[1:])

我假设我需要遍历已解析文件的列表,但我不确定如何。

【问题讨论】:

您的解析器需要一个输入文件名、'-f' 后面的字符串以及要写入的多个文件名('*' 位置)。由于FileType 规范,它会创建并打开这些输出文件。但是由于您不使用args.file,因此您没有对这些输出文件做任何事情。我们不知道FaultList 对您传递的一个输入文件名做了什么。 【参考方案1】:

您可以将globargparse 结合使用以获取与通配符匹配的所有文件的列表。

import argparse  
from glob import glob  

def main(file_names):  
    print file_names  

if __name__ == "__main__":  
    parser = argparse.ArgumentParser()  
    parser.add_argument("file_names", nargs='*') 
    #nargs='*' to combine all positional arguments into a single list 

    args = parser.parse_args()  
    file_names = []

    # use glob to find files matching wildcards
    #if a string does not contain a wildcard, glob will return it as is.
    for arg in args.file_names:  
        file_names += glob(arg)  

main(file_names)

【讨论】:

以上是关于解析多个文件 argparse的主要内容,如果未能解决你的问题,请参考以下文章

python add_argument() 的使用方法

Python——常用Python包的学习笔记

解析多个文件 argparse

如何将多个 XML 文件解析为多个 CSV 文件?

CSVHelper 使用每个文件上的多个映射解析多个 CSV

多个 Spring 配置文件的属性解析(yaml 配置)