2012-11-30 24 views
5

Una virgoletta doppia è simile a questa". Se inserisco questo all'interno di una stringa python ottengo questo ' " '. In python, posso inserire due virgolette doppie in una stringa ' "" ' e questa viene stampata come due virgolette doppie. Tuttavia, non riesco a inserire una singola virgoletta doppia in una stringa, come in precedenza, ' " '. Lo sto facendo in eclipse con pydev e dà un error: "encountered "\r" (13), after : "". Sto cercando di fare quanto segue con nomi di pipe di comando e di file:python stringa '"': singola virgoletta all'interno della stringa

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

risposta

2

È necessario evitare i backslash, altrimenti farà cose strane.

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

Edit: Un modo più divinatorio sarebbe questo però:

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

Grandi risposte a tutti, grazie! – user442920

3

avete bisogno di sfuggire i backslash:

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

In genere, si potrebbe usare stringhe raw (r'...') quando ci sono backslash all'interno una stringa letterale. Tuttavia, come sottolineato da @BrenBarn, questo non funzionerà in questo caso.

+0

Una stringa non elaborata ancora non funzionerà, poiché anche in una stringa non elaborata la barra rovesciata sfugge ancora al carattere di citazione alla fine. Non è possibile avere una stringa non elaborata con un numero dispari di barre retroverse finali. – BrenBarn

+0

@BrenBarn: buona cattura, grazie. – NPE

0

Il backslash dopo upe sta fuoriuscendo il primo closing citazione singolo:

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

Un'altra opzione è quella di comporre la vostra comando in più passaggi:

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) 
Problemi correlati