Python Argparse:原始字符串inpu

2024-09-29 00:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,如果之前有人问过这个问题,我确实搜索过,但所有的点击似乎都是关于python原始字符串的,而不是关于argparse的。

不管怎样,我有一个代码,用户输入一个字符串,然后处理这个字符串。但是,我有一个问题,因为我希望我的代码能够区分\n\\n,这样用户就可以控制它们是换行还是在输出中出现\n

这本身非常简单,我可以让逻辑工作以检查字符串等。但是,argparse似乎没有保持输入字符串的原始状态。所以如果我写:Here is a list:\nItem 1,它被解析为Here is a list:\\nItem 1。如果我将输入字符串中的\n替换为\\n,那么就无法区分两者了。

我可以包含一个bodge(例如,我可以让用户输入say$\n以使\n显示在输出中,或者只输入\n以显示换行符)。但这是混乱的和复杂的代码使用。

有没有办法确保argparse解析的字符串是原始的?(即,如果输入\n,则解析\n,而不是\\n

再说一次,如果之前有人问过这个问题,我很抱歉,但我找不到答案,经过一个多小时的努力,我已经没有主意了(除了菩提)。提前为所有的帮助干杯。

示例代码(如果这不起作用,很抱歉,不确定如何最好地为argparse执行示例代码!)以下内容:

import argparse

parser = argparse.ArgumentParser( description = 'Test.' )
parser.add_argument( 'text', action = 'store', type = str, help = 'The text to parse.' )

args = parser.parse_args( )

print( repr( args.text ) )

Tags: 字符串代码text用户parser示例hereparse
3条回答

正如@hpaulj所指出的,您的问题源于shell和工作方式。您的选择是使用您得到的转义字符来处理字符串。

看看下面的答案: Process escape sequences in a string in Python . 基本上,使用string_escapeunicode_escape来处理字符串。这比用手处理你的绳子好。

如注释中所述,argparse与由shell和Python解释器生成的列表sys.argv一起工作。

使用简单的argvecho脚本:

0928:~/mypy$ cat echo_argv.py
import sys
print(sys.argv)

我得到(一个猛击壳):

0929:~/mypy$ python echo_argv.py Here is a list:\nItem 1 
['echo_argv.py', 'Here', 'is', 'a', 'list:nItem', '1']
0931:~/mypy$ python echo_argv.py "Here is a list:\nItem 1 "
['echo_argv.py', 'Here is a list:\\nItem 1 ']
0931:~/mypy$ python echo_argv.py "Here is a list:\\nItem 1 "
['echo_argv.py', 'Here is a list:\\nItem 1 ']

argparseargv视为字符串列表。它对那些字符串没有任何作用,至少对默认的Nonetype参数没有作用。

以下是解决您问题的可能方法:

import argparse

parser = argparse.ArgumentParser(description='Test.')
parser.add_argument('text', action='store', type=str, help='The text to parse.')

args = parser.parse_args()

print '-' * 80
raw_text = eval('"' + args.text.replace('"', '\\"') + '"')
print raw_text
print '-' * 80
print args.text

但要注意一件事,eval really is dangerous

相关问题 更多 >