我有一個文本檔案“users.txt”
有以下資料
admin|123|admin
user|123|user
我想閱讀所有這些字典串列,例如[{}, {}, {} ]. 這是我的方法,但我沒有得到它的作業。
def read(file, mode, dictionary_keys, split_char):
read_lists = []
read_dict = {}
try:
f = open(file, mode)
except FileNotFoundError as e:
print(e)
return False
else:
for i in f.readlines():
for j in range(len(dictionary_keys)):
key = dictionary_keys[j]
value = i.strip().split(split_char)[j]
read_dict[key] = value
read_lists.append(read_dict)
return read_lists
呼叫此方法將是
user_dict = ['username', 'password', 'role']
a = read('users.txt', 'r', user_dict, '|')
print(a)
和我不期望的輸出
[{'username': 'user', 'password': '123', 'role': 'user'}, {'username': 'user', 'password': '123', 'role': 'user'}]
預期產出
[{'username': 'admin', 'password': '123', 'role': 'admin'}, {'username': 'user', 'password': '123', 'role': 'user'}]
uj5u.com熱心網友回復:
您的問題是,當您追加read_dict到時read_lists,您會繼續追加對同一字典的參考,因此您的輸出串列包含寫入字典的最后一個值的所有副本。您需要為檔案中的每一行重新初始化read_dict。例如:
def read(file, mode, dictionary_keys, split_char):
read_lists = []
try:
f = open(file, mode)
except FileNotFoundError as e:
print(e)
return False
else:
for i in f.readlines():
read_dict = {}
for j in range(len(dictionary_keys)):
key = dictionary_keys[j]
value = i.strip().split(split_char)[j-1]
read_dict[key] = value
read_lists.append(read_dict)
return read_lists
對于您的樣本資料,這給出了輸出
[
{'username': 'admin', 'password': 'admin', 'role': '123'},
{'username': 'user', 'password': 'user', 'role': '123'}
]
uj5u.com熱心網友回復:
使用熊貓要容易得多,它會用更少的代碼為您提供結果
import pandas as pd
df = pd.read_csv('data.csv',sep='|',dtype=str)
df.columns = [['username','password','role']]
dict_list = []
for i,row in df.iterrows():
dict_list.append(row.to_dict())
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507956.html
標籤:python-3.x
