如何处理文件,就像每一行都是带有 argparse 或类似命令的命令

问题描述 投票:0回答:1

我正在创建一个程序,它从某个文本文件中读取文件列表,然后对它们执行各种操作。我希望能够读取每一行,然后像在 CLI 中输入一样处理它。例如:

~/test1.txt -r
~/test2.txt -w "hello"

其中标志

-r
将文件中的文本保存到某个对象,并且
-w
将该标志后面的任何字符串参数附加到文件中。在这种情况下,会将“hello”附加到
test2.txt

我知道 argparse,它完全符合我的要求,但它只读取和处理来自命令行的命令。有没有办法像上面描述的那样解析我的程序中已有的字符串?

如果用argparse无法完成,除了自己编码之外还有其他不错的解决方案吗?

python argparse
1个回答
0
投票

我的猜测是您想要从文本文件中读取并将每一行视为命令行参数。这是您入门的方法。

import argparse
import pathlib
import shlex

# Create a parser
parser = argparse.ArgumentParser()
parser.add_argument("-r", action="store_true")
parser.add_argument("-w")
parser.add_argument("filename")

# Read the lines from the text file
data_path = pathlib.Path(__file__).with_name("input.txt")
with open(data_path, "r", encoding="utf-8") as stream:
    for line in stream:
        print(f"\n# {line.strip()}")
        tokens = shlex.split(line)
        options = parser.parse_args(tokens)
        print(options)

        # Do something with options

输出:


# ~/test1.txt -r
Namespace(r=True, w=None, filename='~/test1.txt')

# ~/test2.txt -w "hello"
Namespace(r=False, w='hello', filename='~/test2.txt')

注释

通常,我们调用

parse.parse_args()
,它解析命令行参数。

为了解析文本行,我们需要拆分该行并将标记列表传递到

parse_args

不要使用

line.split()
:它不理解引号和转义字符。相反,我们使用
shlex.split()
来处理这些细节。

© www.soinside.com 2019 - 2024. All rights reserved.