2016-11-24 15 views
1

コードを実行するたびに、データがsignupdatabase.jsonの内容を上書きします。jsonファイルにデータを永久に記録させるにはどうすればよいですか?

既存のファイルの内容を上書きしないようにするにはどうすればよいですか?

import json 

with open('signupdatabase.json','w') as f: 
    json.dump('b',f) 
    json.dump('a',f) 


print('good') 
+0

このコードでは、閉じるとファイルが消去されません。 'print(open( 'signupdatabase.json')。read())'を追加し、 '' a "" b "'を得ました。それは問題があります.jsonオブジェクトの間に '\ n 'のような区切り文字を置かないので、後でそれらを解読する際に問題が生じるかもしれません。 – tdelaney

+0

スクリプトを複数回実行すると、ファイルを切り捨てる「w」モードで開くため、既存のものが上書きされます。それはあなたが意味することですか? – tdelaney

+0

yeap私はそれが既存のデータを上書きすることに気がついたので、どのようにこの問題を克服するのですか?とにかく助けてくれてありがとう – Ranchu

答えて

1

いくつかのオプションがあります。ユーザー名とパスワードは、プログラムの起動時にファイルからロードし、更新時に保存する単一のdictに格納できます。パスワードを暗号化することは良い考えですが、この質問を超えています。

import json 
import os 
import getpass 

db_filename = 'signupdatabase.json' 

# create on first use 
if not os.path.exists(db_filename): 
    with open(db_filename, 'w') as f: 
     json.dump({}. f) 

# open database 
with open(db_filename) as f: 
    db = json.load(f) 

user = input("User Name: ") 
pw = getpass.getpass() 

db[user] = pw 

# save database 
with open(db_filename, 'a') as f: 
    db = json.dump(db, f) 
0
  1. appendモードでファイルを開き、すべての行の後'\n'を追加します。

    with open('signupdatabase.json','a') as f: 
        json.dump('b\n',f) 
        json.dump('a\n',f) 
    
  2. JSONファイルをデータベースとして使用しないでください。

  3. 「適切な」データベースではなく、プレーンテキストでパスワードを保存しないでください。
関連する問題