2013-10-11 5 views
0

사전에서 인쇄하여 다른 스크립트를 채우려고합니다. 줄 연속 문자 다음에 "예기치 않은 문자"가 계속 나타납니다. 나는사전 키 쌍을 인쇄하려고합니다

mydic = {"printer1": "printserver1", "printer2": "printserver2"} 

for key in mydic.keys(): 
    print ("For /F \"Tokens=4 delims=\\\" %%I In ('reg query HKCU\\Printers\\Connections  ^|find /I \"" + key + "\"') Do If \"%%I\"==\",,"+ mydic[key] +"," + key + "\" goto :REMOVE" + \n + "goto :SKIP" + \n + ":REMOVE" + \n + "RUNDLL32 printui.dll,PrintUIEntry /n \\\\"+ mydic[key] +"\\" + key + " /dn" + \n + ":SKIP") 
+0

\ n을 따옴표로 묶어야합니다. – rlms

+0

하지만 주된 문제는 코드가 의미가 없다는 것입니다. 너 뭐하려고? – rlms

+0

사전을 반복하면 키를 반복하므로 명시 적으로'keys() '를 호출 할 필요가 없습니다. – chepner

답변

8

는 그래서 모두 한 줄, 더 읽을 수없는 그리고 줄 바꿈이 자동으로 여러 줄 문자열을 사용하여 문자열의 부분이 간소화 s :

mydic = {"printer1": "printserver1", "printer2": "printserver2"} 

template = r""" 
FOR /F in blah blah blah 
    do something with {key} 
    with the value of {value} 
    blah blah blah 
END FOR 
""" 

for key, value in mydic.iteritems(): 
    print template.format(key=key, value=value) 
+0

감사합니다. 도와 줘서 고마워! – user2871917

2

문자열의 \n 줄 바꿈 부분을 확인 이유를 잘 모릅니다 :

print ("For /F \"Tokens=4 delims=\\\" %%I In ('reg query HKCU\\Printers\\Connections  ^|find /I \"" + 
     key + "\"') Do If \"%%I\"==\",," + mydic[key] + "," + key + 
     "\" goto :REMOVE\ngoto :SKIP\n:REMOVERUNDLL32 printui.dll,PrintUIEntry /n \\\" + 
     mydic[key] +"\\" + key + " /dn\n:SKIP") 
당신은 정말 모든 줄이려고 트리플 인용 원시 문자열과 함께, 여기에 몇 가지 string formatting를 사용하려면

백 슬래시 :

template = r"""For /F "Tokens=4 delims=\" %%I In ('reg query HKCU\Printers\Connections  ^|find /I "{0}"') Do If "%%I"==",,"{1},{0}" goto :REMOVE 
goto :SKIP 
:REMOVERUNDLL32 printui.dll,PrintUIEntry /n \{1}\{0} /dn 
:SKIP""" 

for key in mydic: 
    print(template.format(key, mydic[key])) 
+0

감사! 문자열 서식 지정 링크는 매우 유용했습니다! – user2871917

관련 문제