2016-07-02 4 views
-2

私はリストにいくつかの値を入れてゲームの設定に使用しようとしています。私は、テキストファイルには、item_index.txtと内容を求めている nは新しい行に前の文字を置いています

<number>: <name> 

私のコードはこれです:

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("}") 

理論的にはこのような設定記述する必要があります:

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

何らかの理由でこれを出力しています:

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

これを引き起こす原因は誰にも分かりますか?私の推測では、それは後にある\ nと関係があるということですが、config.writeを1つだけ使用してそこにすべてを置いたようなことを試した後、完全に無知です。これがあいまいなのならお手数です。あなたの質問については、あなたの問題はあなたがソースファイルからの読み取りの各行の末尾に"\n"を持っているということです

+3

してください、Pythonの文字列クラスは、文字列に値を補間するためのカップルの異なる方法、および2つのミニlanaguagesを持っています。 **あなたがしなければならない最後のことは、文字列closignをアセンブルして引用符を開き、 "+"で連結しようとすることです。また、 'write'メソッドをいくつか呼び出すことも少なくなります。サポート、そしてそれを好きでない人のためのクロスライン文字列連結。 – jsbueno

+0

@jsbueno:正確には、 '%'ベース、 '{}'ベース、 '$'ベースの3種類の補間方法があります。 – GingerPlusPlus

+0

また、なぜJSONですか? – GingerPlusPlus

答えて

0

- ちょうどその値を使用する前にそれを取り除く - new_skin[1].strip()代わりのnew_skin[1]

しかししてください、あなたのために、Pythonで数十種類のハンドリングと文字列の補間をチェックアウトしてください。可読性とメンテナンスのために最悪のことをやっているだけです。あなたがNEW_SKINの端から改行を削除する必要が

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 = skin.strip('\n').split(":") 
関連する問題