2017-06-19 9 views
0

下のスクリプトの17行目のこの文字が新しい行に表示される理由を説明できますか?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

は、そうs = l.split("=")['key1', 'value1\n']のようなものです。解決策:s = l.strip().split("=")

+0

はい、それです! – user2908112

1

質問に基づいて、JSONと書いてください。エンコーダとデコーダを自分で作成するのではなく、出力が有効であることを保証するので、モジュールをよく使う方がいいです。

私たちは、このように、それぞれが'name''code'キーでdict ionaryを含まsublist秒で辞書dataを構成するプログラムを構築する必要があります。それが完了したら、対応するJSONをOUTファイルハンドラに書き込むことができます。あなたがスコープで離れると、これらは自動的にフラッシュし、ファイルを閉じますので、あなたはまた、より良い、with文を使用

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)

L = F.readlines()は(\nに注意してください、それは消えません。\r\nが代わりにも可能です)['key1=value1\n', ...のように見えるためだ

+0

ありがとう、それは解決策ですが、まだそれがうまくいかなかった理由を混乱させてしまいます – user2908112

関連する問題