Python字符串中的单引号和双引号: 字符串内部包含单引号和双引号

6

双引号长成这样:""。如果我把它放进Python字符串里,会变成这样:' " '。在Python中,我可以在一个字符串中放两个双引号,像这样:' "" ',这样就可以打印出两个双引号了。然而,我不能在一个字符串中放一个单独的双引号,就像之前的这样:' " '。我在使用带有PyDev的Eclipse时遇到了这个问题,它给出了一个错误提示:“encountered '\r' (13), after : ''”。我正在尝试使用命令管道和文件名来完成以下操作:

logA = 'thing.txt'
cmdpipe = os.popen('copy "C:\upe\' + logA + '"' + ' "C:\upe\log.txt"') 
3个回答

3

您需要转义反斜杠:

logA = 'thing.txt'
cmdpipe = os.popen('copy "C:\\upe\\' + logA + '"' + ' "C:\\upe\\log.txt"') 

通常情况下,当字符串字面量中包含反斜杠时,人们会使用原始字符串(r'...')。然而,正如@BrenBarn所指出的那样,在这种情况下不起作用。

一个原始字符串仍然无法工作,因为即使在原始字符串中,反斜杠仍然会转义末尾的引号字符。您不能使用以奇数个反斜杠结尾的原始字符串。 - BrenBarn

2

你需要转义反斜杠,否则它将会表现出奇怪的行为。

logA = 'thing.txt'
cmdpipe = os.popen(
    'copy "C:\\upe\\' + logA + '"' + ' "C:\\upe\\log.txt"')

编辑:更Pythonic的方法是这样的:

logA = 'thing.txt'
cmdpipe = os.popen('copy "C:\\upe\\{}" "C:\\upe\\log.txt"'.format(logA))

0

upe 后面的反斜杠是用来转义第一个单引号的闭合符号:

'copy "C:\upe\' + logA + '"' + ' "C:\upe\log.txt"'
--------------^ add an escape at least here, and it will work!

另一种选择是将您的命令分解为多个步骤:

basepath = r'C:\upe'
inpath = os.path.join(basepath, logA)
outpath = os.path.join(basepath, 'log.txt')
logA = 'thing.txt'
command = 'copy "%s" "%s"' % (inpath, outpath)

print command

cmdpipe = os.popen(command)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接