사전을 파일로 저장하는 방법?
dict 값을 변경하고 dict를 텍스트 파일에 저장하는 데 문제가 있습니다 (형식이 동일해야 함) member_phone
. 필드 만 변경하고 싶습니다 .
내 텍스트 파일은 다음 형식입니다.
memberID:member_name:member_email:member_phone
텍스트 파일을 다음과 같이 나눕니다.
mdict={}
for line in file:
x=line.split(':')
a=x[0]
b=x[1]
c=x[2]
d=x[3]
e=b+':'+c+':'+d
mdict[a]=e
에 member_phone
저장 변경을 시도 d
하면 키로 값이 변경되지 않습니다.
def change(mdict,b,c,d,e):
a=input('ID')
if a in mdict:
d= str(input('phone'))
mdict[a]=b+':'+c+':'+d
else:
print('not')
그리고 같은 형식의 텍스트 파일에 dict를 저장하는 방법은 무엇입니까?
거기에는 이런 종류의 피클 모듈이 있습니다.
모든 객체를 저장하고로드하는 데 필요한 모든 것입니다.
def save_obj(obj, name ):
with open('obj/'+ name + '.pkl', 'wb') as f:
pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)
def load_obj(name ):
with open('obj/' + name + '.pkl', 'rb') as f:
return pickle.load(f)
이 함수는 obj
현재 작업 디렉토리에 객체를 저장하는 데 사용되는 폴더 가 어디에서 가정 합니다.
pickle.HIGHEST_PROTOCOL은 이진 형식을 항상 제공하지만 성능이 좋습니다. 프로토콜 0은 텍스트 형식입니다.
컬렉션 컬렉션을 저장하기 위해 shelve 모듈이 있습니다.
Pickle이 가장 좋은 옵션 일 수있는 경우 NumPy를 사용하여 사전을 파일에 저장하고로드하는 방법이 궁금한 경우 :
import numpy as np
# Save
dictionary = {'hello':'world'}
np.save('my_file.npy', dictionary)
# Load
read_dictionary = np.load('my_file.npy').item()
print(read_dictionary['hello']) # displays "world"
참고 : NPY 파일 뷰어
-th 질문이 첫 무엇인지 잘 모르겠지만 사전을 파일로 저장하려면 json
라이브러리를 사용해야합니다 . 로드 및 풋 기능에 대한 문서를 찾아 내.
dict을 파일에 저장하고로드하십시오.
def save_dict_to_file(dic):
f = open('dict.txt','w')
f.write(str(dic))
f.close()
def load_dict_from_file():
f = open('dict.txt','r')
data=f.read()
f.close()
return eval(data)
json
사전 또는 다른 데이터를 JSON 형식으로 쉽게 매핑 할 수있는 경우 에도 모듈 을 사용할 수 있습니다 .
데이터를 파일로 화하십시오.
import json
json.dump( data, open( "file_name.json", 'w' ) )
파일에서 데이터를 읽습니다.
import json
data = json.load( open( "file_name.json" ) )
이 솔루션은 Python 2.x 및 Python 3.x 에서 변경되지 않은 형태로 작동하는 등 많은 이점을 제공합니다 . 또한 JSON 형식으로 저장된 데이터 를 여러 다른 플랫폼 또는 프로그램간에 쉽게 전송할 수 있습니다 . 이 데이터는 사람이 읽을 수도 있습니다 .
다루고있는 것과 같은 문자열 사전의 경우 Python의 내장 텍스트 처리 기능 만 사용하여 수행 할 수 있습니다.
(값이 다른 경우에는 작동하지 않습니다.)
with open('members.txt') as file:
mdict={}
for line in file:
a, b, c, d = line.strip().split(':')
mdict[a] = b + ':' + c + ':' + d
a = input('ID: ')
if a not in mdict:
print('ID {} not found'.format(a))
else:
b, c, d = mdict[a].split(':')
d = input('phone: ')
mdict[a] = b + ':' + c + ':' + d # update entry
with open('members.txt', 'w') as file: # rewrite file
for id, values in mdict.items():
file.write(':'.join([id] + values.split(':')) + '\n')
딕셔너리를 정말로 보관하고 싶지 않다면 가장 좋은 해결책은 csv
파이썬 모듈을 사용 하여 파일을 읽는 것입니다. 그런 다음 데이터 행을 얻고 member_phone
원하는대로 변경할 수 있습니다 . 마지막으로 csv
모듈을 다시 사용하여 파일을 열 때와 동일한 형식으로 파일을 저장할 수 있습니다 .
읽기 용 코드 :
import csv
with open("my_input_file.txt", "r") as f:
reader = csv.reader(f, delimiter=":")
lines = list(reader)
작성 용 코드 :
with open("my_output_file.txt", "w") as f:
writer = csv.writer(f, delimiter=":")
writer.writerows(lines)
물론 change()
기능 을 조정해야 합니다.
def change(lines):
a = input('ID')
for line in lines:
if line[0] == a:
d=str(input("phone"))
line[3]=d
break
else:
print "not"
시간을 정하지는 않았지만 h5가 피클보다 빠르다고 확신합니다. 압축 된 파일 크기는 거의 확실히 더 작습니다.
import deepdish as dd
dd.io.save(filename, {'dict1': dict1, 'dict2': dict2}, compression=('blosc', 9))
빠르고 더러운 솔루션 : dict를 문자열로 변환하고 파일에 저장합니다. 예 :
#dict could be anything:
savedict = open('savedict001.txt', 'w')
savedict.write(str(dict))
savedict.close()
참고 URL : https://stackoverflow.com/questions/19201290/how-to-save-a-dictionary-to-a-file
'IT' 카테고리의 다른 글
C ++ 11의 코드 풀링 (0) | 2020.07.29 |
---|---|
파일 린트를 사용하여 하나의 특정 라인을 무시할 수 있습니까? (0) | 2020.07.29 |
Android에서 서비스 시작 (0) | 2020.07.28 |
우분투 16.04에서 nodejs 업데이트 (0) | 2020.07.28 |
드롭 다운 protractorjs e2e 테스트에서 옵션을 선택하는 방법 (0) | 2020.07.28 |