2016-07-02 47 views
-2

我試圖爲列表取一些值並將它們用於遊戲配置,但是當我寫入配置時,它沒有使用它應該使用的佈局。使用 n將前一個字符放在一個新行上

我已文本文件名爲item_index.txt和內容:

<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並將整個東西放在那裏之後,我完全無能爲力。對不起,如果這是模糊的。

+3

請,Python的string類有幾個不同的方法,和兩個小lanaguages內插字符串的值。你應該做的最後一件**事情是試圖組裝一個字符串closign和打開引號並與「+」連接 - 甚至更少地調用「write」方法 - 因爲該語言也有多行字符串支持和交叉字符串連接,誰不喜歡那樣。 – jsbueno

+0

@jsbueno:準確地說,三種插值方法 - 基於'''',''}'和''''的。 – GingerPlusPlus

+0

另外,爲什麼不是JSON? – GingerPlusPlus

回答

0

至於你的問題,你的問題是,你有一個"\n"在從源文件讀取的每一行的末尾 - 使用它的值之前,只是剝離它 - 的new_skin[1].strip()代替new_skin[1]

但是,請爲了您的目的,請檢查Python中幾十種手工標記和插入字符串的方式 - 您只是做了可讀性和可保護性最差的事情。

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

您將不得不使用'{{'或'.format()'將錯誤替換模板中的文字'{'s'。 – AChampion

1

您需要從new_skin年底剝離換行符:

new_skin = skin.strip('\n').split(":") 
相關問題