python 3:引用随机字符串生成的结果

python 3:引用随机字符串生成的结果,python,python-3.x,Python,Python 3.x,我是python新手,事情并不总是像我期望的那样工作。。。但我正在慢慢地学习。这是一个恰当的例子。如果我通过以下方式随机创建字符串: thing = ''.join([ random.SystemRandom().choice( "{}{}{}".format( string.ascii_letters, string.digits, string.punctuation ) ) for i in range(63) ])

我是python新手,事情并不总是像我期望的那样工作。。。但我正在慢慢地学习。这是一个恰当的例子。如果我通过以下方式随机创建字符串:

thing = ''.join([
    random.SystemRandom().choice(
        "{}{}{}".format(
            string.ascii_letters, string.digits, string.punctuation
        )
    ) for i in range(63)
])
然后我可以得到一个带单引号和反斜杠的字符串。我假设接下来应该遍历字符串并引用可能有问题的字符。例如,如果生成(短)字符串:

我的直觉告诉我,我应该引用这句话:

cs]b77e\\IM>&4/,u.s_jr"xmMdHD7a\'wrEw(
看起来
string.replace()
方法是我的朋友

thing = ''.join([
    random.SystemRandom().choice(
        "{}{}{}".format(
            string.ascii_letters, string.digits, string.punctuation
        )
    ) for i in range(63)
]).replace('\\', '\\').replace('\'', '\'')
但是有更好的办法吗

另外,在
replace()
方法中,单引号字符串的含义似乎会随着上下文的不同而变化。来自Perl,这对我来说似乎很奇怪。我最初的尝试让我做了
replace('\\','\\\')
之类的事情,认为我必须引用替换字符串中的字符。这是正常的还是我错过了什么

编辑 我的目标是在字符串中包含63个字符。我真的不认为我必须引用任何生成的单引号,但我的想法是,如果我以后使用字符串,并且它生成了反斜杠,那么反斜杠后面的下一个字符将表现为它被引用,对吗?我的意思是:

len('1234')
产生
4
但是

len('12\4')

产生
3
,因此我需要对生成的字符串进行后期处理,以至少引用反斜杠,对吗?有没有比一连串的
replaces()
方法更好的方法来引用有问题的字符?

您不必转义字符,除非它们是您正在编写的代码的一部分或来自用户的输入。如果反斜杠字符或引号字符是由Python程序生成的,则它已作为该字符存储在内存中。没有必要做任何额外的转义

为什么??因为Python不是解释字符串文字,它只是生成字符,这些字符作为数字存储在内存中。当您要求Python显示包含其中一个字符(如单引号或反斜杠)的字符串时,它将自动对其进行转义

这里有一个例子。双引号是34,单引号是字符39,反斜杠是92

'a'+chr(34)+'b'+chr(39)+'c'+chr(92)+'d'
# returns:
'a"b\'c\\d'
因为我包含了一个双引号和一个单引号,Python将使用一个单引号包围字符串,在字符串中使用一个未转义的双引号,一个转义的单引号和转义的反斜杠


因此,不需要转义Python程序中生成的字符,它会为您转义。

您不必转义字符,除非它们是您正在编写的代码的一部分或来自用户的输入。如果反斜杠字符或引号字符是由Python程序生成的,则它已作为该字符存储在内存中。没有必要做任何额外的转义

为什么??因为Python不是解释字符串文字,它只是生成字符,这些字符作为数字存储在内存中。当您要求Python显示包含其中一个字符(如单引号或反斜杠)的字符串时,它将自动对其进行转义

这里有一个例子。双引号是34,单引号是字符39,反斜杠是92

'a'+chr(34)+'b'+chr(39)+'c'+chr(92)+'d'
# returns:
'a"b\'c\\d'
因为我包含了一个双引号和一个单引号,Python将使用一个单引号包围字符串,在字符串中使用一个未转义的双引号,一个转义的单引号和转义的反斜杠


因此,不需要转义Python程序中生成的字符,它会为您转义。

字符串可以包含任何有效字符;引号和反斜杠仅在Python代码中表示字符串时有用或特殊。因此,当您已经有一个包含所需字符的字符串时,通常不需要执行类似的操作


如果您想要一个可以被Python解析的表示(例如,通过将其写入
.py
文件),
repr()
可以做到这一点。

字符串可以包含任何有效字符;引号和反斜杠仅在Python代码中表示字符串时有用或特殊。因此,当您已经有一个包含所需字符的字符串时,通常不需要执行类似的操作


如果您想要一个可以被Python解析的表示(例如,通过将其写入
.py
文件),
repr()
可以做到这一点。

您的问题是什么?你的目标是什么?我不认为这是必要的。如果使用
s={}{}格式(字符串.标点符号[23],'n')
,它将
打印为
\n
,但
报告为
\\n
。我不认为您需要像担心字符串文字一样担心这些事情。您的问题是什么?你的目标是什么?我不认为这是必要的。如果使用
s={}{}格式(字符串.标点符号[23],'n')
,它将
打印为
\n
,但
报告为
\\n
。我不认为您需要像担心字符串文字一样担心这些事情。