Estou com problemas para alterar um valor do dict e salvá-lo em um arquivo de texto (o formato deve ser o mesmo), só quero alterar o member_phone
campo.
Meu arquivo de texto tem o seguinte formato:
memberID:member_name:member_email:member_phone
e eu divido o arquivo de texto com:
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
Quando tento alterar o member_phone
armazenado d
, o valor mudou, não flui pela chave,
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')
e como salvar o dict em um arquivo de texto com o mesmo formato?
fonte
save_obj
parece exigir que o arquivoobj/'+ name + '.pkl
já exista. Criei um dicionário chamadoQ
, preenchi-o e fiz a ligaçãosave_obj(Q, "Qtable")
. Recebi um erro:FileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
como criar o arquivo antes de escrever nele?wb+
to create file, ie:with open('obj/'+ name + '.pkl', 'wb+')
+
ao modo não afetará o seu problema (o andrey.s está incorreto). Seu problema parece ser por causa de uma ou duas coisas. Para quesave_obj()
esta resposta funcione, um subdiretório nomeado já"obj"
deve existir, porqueopen()
não o criará automaticamente. Segundo, o primeiro argumentosave_obj()
é o objeto Python a ser salvo, não o nome do subdiretório (embora não esteja totalmente claro o que você quis dizer comQ
nasave_obj(Q, "Qtable")
chamada de exemplo ). Você pode criar um diretório se ele ainda não sairos.mkdir()
.Pickle é provavelmente a melhor opção, mas caso alguém se pergunte como salvar e carregar um dicionário em um arquivo usando o NumPy:
Visualizador de arquivos FYI: NPY
fonte
type(read_dictionary)
revela assim) e .item () basicamente converte esse elemento para um objeto de python escalar que é um dicionário como afirmado aquiTambém podemos usar o
json
módulo no caso em que dicionários ou outros dados podem ser facilmente mapeados para o formato JSON .Esta solução traz muitos benefícios , por exemplo, obras para Python 2.x e Python 3.x em uma forma inalterada e, além disso, dados guardados no JSON formato pode ser facilmente transferidos entre muitas plataformas ou programas diferentes . Esses dados também são legíveis por humanos .
fonte
open
diretamente, em vez de um contexto criado porwith
. Existe uma garantia, o identificador do arquivo será fechado sejson.dump
falhar?Não tenho certeza de qual é sua primeira pergunta, mas se você deseja salvar um dicionário em um arquivo, use a
json
biblioteca. Procure a documentação das cargas e coloca funções.fonte
Salve e carregue o comando no arquivo:
fonte
Para um dicionário de strings como o que você está lidando, isso pode ser feito usando apenas os recursos internos de processamento de texto do Python.
(Observe que isso não funcionaria se os valores fossem outra coisa.)
fonte
split()
método) -que é o tema desta questão. Parece que você está tentando usá-lo em um dicionário de dicionários, então não, não funcionaria com eles. Eu também não aprecio votos negativos das pessoas porque elas realmente não entendem a pergunta (e, portanto, o contexto das respostas que estão sendo fornecidas). Atualizarei minha resposta para fazer quando usá-la for apropriada. Portanto, desfaça seu voto negativo.Sugiro que você salve seus dados usando o formato JSON em vez do formato pickle, pois os arquivos JSON são legíveis por humanos, o que facilita sua depuração, pois seus dados são pequenos. Os arquivos JSON também são usados por outros programas para ler e gravar dados. Você pode ler mais sobre isso aqui
Você precisará instalar o módulo JSON, pode fazê-lo com o pip:
Isso cria um arquivo json com o nome myfile.
Isso lê e armazena os dados myfile.json em um objeto de dados.
fonte
A menos que você queira realmente manter o dicionário, acho que a melhor solução é usar o
csv
módulo Python para ler o arquivo. Em seguida, você obtém linhas de dados e pode alterarmember_phone
ou o que quiser; finalmente, você pode usar ocsv
módulo novamente para salvar o arquivo no mesmo formato que você o abriu.Código para leitura:
Código para escrever:
Obviamente, você precisa adaptar sua
change()
função:fonte
Of course, you need to adapt your change() function:
dict
foi usado enquanto CSV funciona mais como uma listaAinda não cronometrei, mas aposto que o h5 é mais rápido que o pickle; o tamanho do arquivo com compactação é quase certamente menor.
fonte
Solução rápida e suja: converta o dict em string e salve em arquivo, por exemplo:
fonte