2017-10-16 3 views
0

Problème:Comment insérer des données dans un tableau JSON dans un fichier?

Je travaille sur un méta-projet de fichier, qui recueille des informations fichier d'un dossier et le stocke dans un fichier JSON.

Mon fichier vide JSON ressemble à ceci

db.json

{ 
    "samples" : [] 
} 

Maintenant, mon idée est de scanner chaque fichier et insérez chaque enregistrement dans un tableau d'échantillons comme celui-ci

db .json

{ 
    "samples" : [ 
{ 
    "file_name": "ba18524fe5d5c6e99b99c7da66dbbfa094ab8f61", 
    "file_new_location": "/home/admin/", 
    "file_path": "/home/admin/vt_files/ba18524fe5d5c6e99b99c7da66dbbfa094ab8f61", 
    "file_source": "VT", 
    "md5": "149c4ac4ba0863607e033d6a5721fee7", 
    "mime": "application_x-dosexec", 
    "severity": "high", 
    "sha256": "50bc946af55f0a5deb66f935229046c1ec74fb2233d71efa3ae064a073a771f5" 
} 
] 
} 

Mais mon problème est quand jamais j'essaie d'insérer des enregistrements, je ne peux pas insérer dans les échantillons, mais viennent en une seule ligne.

for file_original_name in files: 
    file_meta = {} 
    file_meta['file_name'] = file_original_name 
    file_meta['file_path'] = os.path.join(root,file_original_name) 
    file_meta['file_source'] = source 
    file_meta['severity'] = severity 
    file_meta['md5'] = md5(file_meta['file_path']) 
    file_meta['sha256'] = sha256(file_meta['file_path']) 
    mime = magic.Magic(mime=True) 
    file_meta['mime'] = mime.from_file(file_meta['file_path']).replace('/','_') 
    file_meta['file_new_location'] = '{}/{}/{}/{}'.format(default_root,severity,file_meta['mime'],file_original_name) 
    try: 
     extracted_new_dir = os.path.join(default_root,severity,file_meta['mime']) 
     if not os.path.isdir(extracted_new_dir): 
      os.makedirs(extracted_new_dir) 
     if delete: 
      move(file_meta['file_path'],file_meta['file_new_location']) 
     else: 
      copyfile(file_meta['file_path'],file_meta['file_new_location']) 
     print json.dumps(file_meta,sort_keys=True,indent=4) 
    except Exception as e: 
     print e 
    result[file_original_name] = (file_meta) 
    with open('db.json','a') as f: 
     json.dump(result , f) 

Des suggestions sur comment résoudre ce problème?

+0

@Sraw Je veux insérer dans le tableau. –

+0

Je pense que vous devez d'abord charger le fichier json entier, puis le modifier comme si vous modifiez un 'dict/list', puis le vider à nouveau. – Sraw

Répondre

0

essayer de formater le résultat d'abord, avant de l'écrire dans le fichier:

result = json.dumps(r, indent=4) 
with open('db.json','a') as f: 
    f.write(result)