2016-07-02 2 views
-2

나는 목록에 대해 일부 값을 가져 와서 게임 구성에 사용하려고합니다. 그러나 구성에 쓸 때 레이아웃을 사용하지 않습니다. n을 사용하면 새 줄에 이전 문자가 배치됩니다.

"<name>" 
    { 
     "paint" "<number>" 
     "wear" "0.000000000000000001" 
     "quality" "3" 
    } 
:

이론적으로
file = open("item_index.txt", "r", encoding="utf8") 
    with open("config.cfg", "w") as config: 
    lines = file.readlines() 
    lines.sort() 
    config.write('"Paints"\n{\n') 
    for skin in lines: 
     skin = skin.replace(": ",":") 
     new_skin = skin.split(":") 
     config.write(' "' + new_skin[1] + '"' + '\n') 
     config.write(' {\n') 
     config.write('  "paint" "' + new_skin[0] + '"\n') 
     config.write('  "wear" "0.000000000000000001"\n') 
     config.write('  "quality" "3"\n') 
     config.write(' }\n') 
config.write("}") 

가이 같은 설정을 작성해야 :

<number>: <name> 

내 코드는 이것이다 :

나는 텍스트 파일은 item_index.txt 및 내용을 불렀다

하지만 어떤 이유로 출력되는 것은

입니다.
"<name> 
" 
    { 
     "paint" "<number>" 
     "wear" "0.000000000000000001" 
     "quality" "3" 
    } 

이 문제의 원인을 아는 사람이 있습니까? 내 추측은 그 이후의 \ n과 관련이있다.하지만 config.write를 사용하고 거기에 모든 것을 배치하는 것과 같은 일을 시도한 후에는 완전히 단서가 없다. 죄송합니다.

+3

, 파이썬의 문자열 클래스는 몇 가지 방법, 문자열에게 값을 보간을위한 두 개의 미니 lanaguages을 가지고하시기 바랍니다. ** 마지막으로 **해야 할 일은 문자열 closign을 모으고 따옴표를 열고 "+"로 연결하려고 시도하는 것입니다. 또한'write' 메소드를 여러 번 호출하는 것보다 언어가 다중 행 문자열이기 때문에 지원, 그리고 그것을 싫어하는 사람을위한 라인 문자열 연결 교차. – jsbueno

+0

@jsbueno : 정확히 말하자면, '%'기반,'{}'기반 및'$'기반의 보간 방법입니다. – GingerPlusPlus

+0

또한 JSON을 사용하지 않는 이유는 무엇입니까? – GingerPlusPlus

답변

0

질문에 관해서는, 문제는 소스 파일에서 읽기의 각 라인의 끝에 "\n"을 가지고있다 - 단지 그 값 사용하기 전에 제거 - 그러나 new_skin[1].strip() 대신 new_skin[1]

의를하시기 바랍니다, 파이썬에서 수십 가지 방법으로 수작업과 문자열 삽입을 점검해보십시오. 가독성과 유지 보수성 측면에서 가능한 한 최악의 작업을 수행하고 있습니다.

file = open("item_index.txt", "r", encoding="utf8") 
template = """\ 
{sk1} 
{{ 
    "paint" "{sk0}" 
    "wear" "0.000000000000000001" 
    "quality" "3" 
}} 
""" 
with open("config.cfg", "w") as config: 
    config.write('"Paints"\n{\n') 
    for skin in sorted(file): 
     new_skin = skin.split(":") 
     config.write(template.format(sk0=new_skin[0].strip(), sk1=new_skin[1].strip(), wear=wear) 
    config.write("}") 
+0

템플릿의'{'s를'{{'또는'.format()'으로 바꾸어야 할 것입니다. – AChampion

1

당신은 new_skin의 끝에서 줄 바꿈을 제거해야합니다

new_skin = skin.strip('\n').split(":") 
관련 문제