<질문>
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를 저장하는 방법은 무엇입니까?
<답변1>
파이썬에는pickle이런 종류의 모듈입니다.
이러한 함수는 거의 모든 객체를 저장하고로드하는 데 필요한 모든 것입니다.
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기준 치수.
<답변2>
Pickle이 아마도 최선의 선택 일 것입니다. 그러나 누군가 NumPy를 사용하여 사전을 파일에 저장하고로드하는 방법을 궁금해하는 경우 :
import numpy as np
# Save
dictionary = {'hello':'world'}
np.save('my_file.npy', dictionary)
# Load
read_dictionary = np.load('my_file.npy',allow_pickle='TRUE').item()
print(read_dictionary['hello']) # displays "world"
참고 :NPY file viewer
<답변3>
json
모듈을 사용할 수도 있습니다.사전 또는 기타 데이터를 쉽게 매핑 할 수있는 경우JSON체재.
import json
# Serialize data into file:
json.dump( data, open( "file_name.json", 'w' ) )
# Read data from file:
data = json.load( open( "file_name.json" ) )
이 솔루션은 많은 이점을 제공합니다., 예 :Python 2.x 및 Python 3.x 에서 변경되지 않은 형식으로 작동합니다.또한JSON형식은다양한 플랫폼 또는 프로그램간에 쉽게 전송. 이 데이터는 또한사람이 읽을 수있는.
<답변4>
첫 번째 질문이 무엇인지 잘 모르겠지만 사전을 파일에 저장하려면 다음을 사용해야합니다.json
도서관. 로드 및 넣기 기능에 대한 문서를 찾아보십시오.
<답변5>
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)
<답변6>
JSON 파일은 사람이 읽을 수 있으므로 데이터가 작기 때문에 디버깅이 더 쉬워 지므로 pickle 형식 대신 JSON 형식을 사용하여 데이터를 저장하는 것이 좋습니다. JSON 파일은 다른 프로그램에서도 데이터를 읽고 쓰는 데 사용됩니다. 그것에 대해 더 읽을 수 있습니다here
JSON 모듈을 설치해야합니다. pip를 사용하면됩니다.
pip install json
# To save the dictionary into a file:
json.dump( data, open( "myfile.json", 'w' ) )
그러면 이름이 myfile 인 json 파일이 생성됩니다.
# To read data from file:
data = json.load( open( "myfile.json" ) )
이것은 데이터 객체에서 myfile.json 데이터를 읽고 저장합니다.
<답변7>
다루고있는 것과 같은 문자열 사전의 경우 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')
<답변8>
정말 사전을 보관하고 싶지 않다면 최선의 해결책은csv
파일을 읽을 Python 모듈입니다. 그런 다음 데이터 행을 얻고 변경할 수 있습니다.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"
<답변9>
Pickle은 보안 문제가 있고 느리기 때문에 (source), JSON은 빠르고 내장되어 있으며 사람이 읽을 수 있으며 상호 교환이 가능하므로 JSON을 사용합니다.
import json
data = {'another_dict': {'a': 0, 'b': 1}, 'a_list': [0, 1, 2, 3]}
# e.g. file = './data.json'
with open(file, 'w') as f:
json.dump(data, f)
읽기도 비슷합니다.
with open(file, 'r') as f:
data = json.load(f)
이것은this answer이지만 파일 처리를 올바르게 구현합니다.
<답변10>
시간을 정하지는 않았지만 h5가 피클보다 빠르다고 확신합니다. 압축 된 파일 크기는 거의 확실히 더 작습니다.
import deepdish as dd
dd.io.save(filename, {'dict1': dict1, 'dict2': dict2}, compression=('blosc', 9))
'개발 > Python' 카테고리의 다른 글
Python / Django : runserver에서 콘솔에 로그, Apache에서 파일에 로그 (0) | 2021.01.15 |
---|---|
[파이썬] pip를 사용한 SciPy 및 NumPy 설치 질문 (0) | 2021.01.14 |
파이썬의 dict에서 랜덤 값을 얻는 방법 (0) | 2021.01.14 |
[파이썬] Pandas 데이터 프레임에 모든 열 이름을 표시하는 방법은 무엇입니까? (0) | 2021.01.13 |