有时当我从文件或用户那里获得输入时,我会得到一个包含转义序列的字符串.我想以与Python处理字符串文字中的转义序列相同的方式处理转义序列.
例如,假设myString定义为:
>>> myString = "spam\\neggs"
>>> print(myString)
spam\neggs
Run Code Online (Sandbox Code Playgroud)
我想要一个函数(我会称之为process)这样做:
>>> print(process(myString))
spam
eggs
Run Code Online (Sandbox Code Playgroud)
重要的是该函数可以处理Python中的所有转义序列(在上面链接的表中列出).
Python有功能吗?
我有一些需要转义的转义字符串.我想用Python做这件事.
例如,在python2.7中,我可以这样做:
>>> "\\123omething special".decode('string-escape')
'Something special'
>>>
Run Code Online (Sandbox Code Playgroud)
我如何在Python3中完成它?这不起作用:
>>> b"\\123omething special".decode('string-escape')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: unknown encoding: string-escape
>>>
Run Code Online (Sandbox Code Playgroud)
我的目标是成为一个像这样的字符串:
s\000u\000p\000p\000o\000r\000t\000@\000p\000s\000i\000l\000o\000c\000.\000c\000o\000m\000
Run Code Online (Sandbox Code Playgroud)
把它变成:
"support@psiloc.com"
Run Code Online (Sandbox Code Playgroud)
在进行转换之后,我将探测我的字符串是用UTF-8还是UTF-16编码的.
Ruby有没有任何内置的转义和转义字符串的方法?在过去,我使用正则表达式; 但是,我发现Ruby可能一直在内部进行这样的转换.也许这个功能在某处暴露.
到目前为止,我已经提出了这些功能.他们工作,但他们似乎有点hacky:
def escape(s)
s.inspect[1..-2]
end
def unescape(s)
eval %Q{"#{s}"}
end
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
抱歉,如果以前曾问过这个问题,我确实进行了搜索,但所有命中似乎都与python raw字符串有关,而不是argparse。
无论如何,我有一个代码,用户输入一个字符串,然后对该字符串进行处理。但是,我有一个问题,因为我希望我的代码能够区分\n和,\\n以便用户可以控制他们是否换行或\n分别出现在输出中。
这本身非常简单,并且我可以使逻辑工作来检查字符串等。但是,argparse似乎并没有保持输入字符串的原始状态。因此,如果我要写:Here is a list:\nItem 1它将解析为Here is a list:\\nItem 1。如果要在输入字符串中替换\n为\\n,则会解析出完全相同的事物,因此无法区分两者。
我可以包括bodge(例如,我可以让用户输入发言权$\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 ) )
Run Code Online (Sandbox Code Playgroud) argparse库对转义字符(如\ t到制表符和\ n到换行符)的处理方式与我更喜欢。该问题的答案给出了解决方案,但我想使它对用户不可见。
给定程序:
#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--delimiter', default='\t')
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)
您将收到以下输出:
bash$ parser.py -d \t
Namespace(delimiter='t')
bash$ parser.py -d \\t
Namespace(delimiter='\\t')
bash$ parser.py -d '\t'
Namespace(delimiter='\\t')
bash$ parser.py -d '\\t'
Namespace(delimiter='\\\\t')
bash$ parser.py -d "\t"
Namespace(delimiter='\\t')
bash$ parser.py -d "\\t"
Namespace(delimiter='\\t')
bash$ parser.py -d $'\t'
Namespace(delimiter='\t')
bash$ parser.py -d $'\\t'
Namespace(delimiter='\\t')
bash$ parser.py -d $"\t"
Namespace(delimiter='$\\t')
bash$ parser.py -d $"\\t"
Namespace(delimiter='$\\t')
Run Code Online (Sandbox Code Playgroud)
我只有用
parser.py -d $'\t'
Run Code Online (Sandbox Code Playgroud)
但我希望输入看起来像
parser.py -d \t
Run Code Online (Sandbox Code Playgroud)
或更小 …
有很多关于 utf-8 > unicode 转换的问题,但我仍然没有找到我的问题的答案。
让我们有这样的字符串:
a = "Je-li pro za\\xc5\\x99azov\\xc3\\xa1n\\xc3\\xad"
Run Code Online (Sandbox Code Playgroud)
Python 3.6 理解这个字符串就像Je-li pro za\xc5\x99azov\xc3\xa1n\xc3\xad。我需要将此类似 utf-8 的字符串转换为 unicode 表示形式。最终的结果应该是Je-li pro za?azování。
随着a.decode("utf-8")我得到AttributeError: 'str' object has no attribute 'decode',因为 Python 意味着该对象已经被解码。
如果我先用 将它转换为字节bytes(a, "utf-8"),反斜杠只会加倍并再次.decode("utf-8")将其返回到我当前的状态a。
如何获得unicode字符串济利亲咱?azování从这个a?