2017-06-19 140 views
0

有人可以解釋爲什麼下面的腳本中第17行的char被打印在新行上?Python打印新行

from pathlib import Path 

pathList = Path("states").glob("**/*.*") 
OUT = open("resources/states.json", "w") 

OUT.write("{\n") 
for path in pathList: 
    F = open(str(path),"r") 
    L = F.readlines() 
    OUT.write("\"" + str(path) + "\":\n") 
    OUT.write("[\n") 
    for l in L: 
     s = l.split("=") 
     print(s) 
     OUT.write("{") 
     OUT.write(" \"name\": " + "\"" + s[0] + "\"" + ",\n") 
     OUT.write(" \"code\": " + "\"" + (s[0] if len(s) == 1 else s[1]) + "\"") 
     OUT.write("}" + ("" if l == L[-1] else ",") + "\n") 
    OUT.write("],\n\n") 
    F.close() 
OUT.write("}\n") 
OUT.flush() 
OUT.close() 

OUTPUT:

{ 
    "states/APO_states.txt": [ 
     { 
      "name": "Armed Forces Americas", 
      "code": "AA 
" 
     }, 
     { 
      "name": "Armed Forces", 
      "code": "AE 
" 
     }, 

    ... 

有什麼不對?我試圖沖洗它,但它沒有幫助。

+0

你能解釋爲什麼你不使用爲此設計的模塊 - ['json'](https://docs.python.org/3/library/json.html)? – zwer

+0

'print'自動以換行符結束。如果你想避免這種情況,使用'print(...,end ='')' – inspectorG4dget

+0

對不起,但我正在使用寫入,而不是打印。最後一個字符「\」「應該包含在行結束之前,對嗎? – user2908112

回答

2

這是因爲L = F.readlines()看起來像['key1=value1\n', ...(注意\n,它並沒有消失; \r\n也可以代替),所以s = l.split("=")就像['key1', 'value1\n']。解決方案:s = l.strip().split("=")

+0

是的,這就是它!謝謝! – user2908112

1

根據你的問題,你想寫JSON。自己編寫編碼器和解碼器,而不是自己編寫編碼器和解碼器,因爲它保證輸出有效,所以最好使用模塊。

因此,我們必須構建構建一個字典datasublist s表示每個包含dict ionary與'name''code'按鍵的程序。完成後,我們可以將相應的JSON寫入OUT文件處理程序。

from pathlib import Path 
import json 

pathList = Path("states").glob("**/*.*") 
with open("resources/states.json", "w") as OUT: 
    data = {} 
    for path in pathList: 
     with open(str(path),"r") as F: 
      sublist = [] 
      for l in F: 
       s = l.strip().split("=") 
       print(s) 
       sublist.append({'name':s[0],'code':s[0] if len(s) == 0 else s[1]}) 
     data[str(path)] = sublist 
    json.dump(data,OUT)

您還更好地利用with語句,因爲這些會自動將刷新,一旦你與範圍離開關閉文件。

+0

謝謝,這是一個解決方案,但仍然困惑爲什麼它沒有工作 – user2908112