Home > Back-end >  How to write dictionary to a text file properly
How to write dictionary to a text file properly

Time:07-09

I am trying to create a text file with dictionary storing some value so that I can retrieve it later but the write creates multiple dictionary how can I create only a single dictionary also the type of data is returned is as string how can I use it as dictionary, kindly pardon I am new to python,

I tried with json dump method but I was getting typeerror-object-of-type-method-is-not-json-serializable

import json

mydic = {}

for i in range(3):
    uname = input("enter uname\n")
    pwd = input("enter pwd\n")

    mydic[uname] = pwd

print(mydic)


with open("cd.txt","a ") as file:
    file.write(str(mydic))


with open("cd.txt","r") as file:
    data = file.read()
    print(data,type(data))

Data is getting saved as below 1-3 I gave input in first attempt 4 -6 for second attempt U can see 2 different dictionay got created

{'1': '1', '2': '2', '3': '3'}{'4': '4', '5': '5', '6': '6'}

CodePudding user response:

You are adding the string conversion of your dictionary onto the file. Each time you run your program, the a flag tells it to append as a string.

You can fix this by using a json format–like you imported:

import json

mydic = {}

# Read existing data
with open('cd.json', 'r') as jsonFile:
    mydic = json.load(jsonFile)

# Get usernames and passwords
for i in range(3):
    uname = input("enter uname\n")
    pwd = input("enter pwd\n")

    mydic[uname] = pwd

print(mydic)


# Write new values
with open('cd.json', 'w') as jsonFile:   
    json.dump(mydic, jsonFile, indent=4, sort_keys=True)

First we read the existing values, then we run through the code you wrote to get usernames and passwords, and finally, we save all the data to a json file.

CodePudding user response:

You need to handle the content in the file as JSON, that's the easiest way to update the content, not handling as string version of dictionnary that you would append

I used pathlib.Path to facilitate the file interactions

import json
from pathlib import Path

file = Path("cd.json")

if file.exists():  # load existing data
    mydic = json.loads(file.read_text())
else:  # create new
    mydic = {}

# add more data
for i in range(3):
    uname = input("enter uname\n")
    pwd = input("enter pwd\n")
    mydic[uname] = pwd

print(mydic)

# save in file
file.write_text(json.dumps(mydic))

# load back to verify
mydic = json.loads(file.read_text())
print(mydic)

CodePudding user response:

Try writing the dictionary as Pandas Dataframe in a csv file. It's much simpler to write and read from an csv file. And in future if you are having multiple dictionaries then you can just make a list of dicts and write to the csv file.

import pandas as pd

df=pd.DataFrame([your_dictionary])
df.to_csv(file_name)

#read csv
read_df = pd.read_csv(file_name)
dict_list=read_df.to_dict('records')  #this will give you the list of dictionaries
  • Related