将一个字典写入txt文件并将其读回来?

我正在尝试将字典写入txt文件。 然后通过键入raw_input来读取dict值。我觉得我只是错过了一步,但我现在已经找了一段时间。

我收到这个错误

File "name.py", line 24, in reading

print whip[name]

TypeError: string indices must be integers, not str

我的代码:

#!/usr/bin/env python

from sys import exit

class Person(object):

def __init__(self):

self.name = ""

self.address = ""

self.phone = ""

self.age = ""

self.whip = {}

def writing(self):

self.whip[p.name] = p.age, p.address, p.phone

target = open('deed.txt', 'a')

target.write(str(self.whip))

print self.whip

def reading(self):

self.whip = open('deed.txt', 'r').read()

name = raw_input("> ")

if name in self.whip:

print self.whip[name]

p = Person()

while True:

print "Type:\n\t*read to read data base\n\t*write to write to data base\n\t*exit to exit"

action = raw_input("\n> ")

if "write" in action:

p.name = raw_input("Name?\n> ")

p.phone = raw_input("Phone Number?\n> ")

p.age = raw_input("Age?\n> ")

p.address = raw_input("Address?\n>")

p.writing()

elif "read" in action:

p.reading()

elif "exit" in action:

exit(0)

Radioactive Head asked 2019-08-18T23:13:33Z

6个解决方案

146 votes

你试过json模块吗? JSON格式与python字典非常相似。 它是人类可读/可写的:

>>> import json

>>> d = {"one":1, "two":2}

>>> json.dump(d, open("text.txt",'w'))

此代码转储到文本文件

$ cat text.txt

{"two": 2, "one": 1}

您也可以从JSON文件加载:

>>> d2 = json.load(open("text.txt"))

>>> print d2

{u'two': 2, u'one': 1}

KFL answered 2019-08-18T23:15:36Z

73 votes

你的代码几乎是正确的! 你是对的,你只是错过了一步。 当你读入文件时,你正在读它作为一个字符串; 但是你想把字符串变回字典。

您看到的错误消息是因为with是一个字符串,而不是字典。

我首先写道,您可以将字符串输入with,但这不起作用! 你需要做点别的事。

这是最简单的方法:将字符串输入with。如下所示:

def reading(self):

s = open('deed.txt', 'r').read()

self.whip = eval(s)

你可以在一行中完成它,但我觉得它看起来很麻烦:

def reading(self):

self.whip = eval(open('deed.txt', 'r').read())

但有时不建议使用with。 问题是with将评估任何字符串,如果有人欺骗你运行一个非常棘手的字符串,可能会发生一些不好的事情。 在这种情况下,您只是在自己的文件上运行ast,所以它应该没问题。

但是因为with很有用,所以有人做了一个更安全的替代品。 这被称为with,您可以从名为ast的Python模块中获取它。

import ast

def reading(self):

s = open('deed.txt', 'r').read()

self.whip = ast.literal_eval(s)

with只会评估变成基本Python类型的字符串,所以没有办法让棘手的字符串在你的计算机上做坏事。

编辑

实际上,Python中的最佳实践是使用with语句来确保文件正确关闭。 重写以上内容使用with声明:

import ast

def reading(self):

with open('deed.txt', 'r') as f:

s = f.read()

self.whip = ast.literal_eval(s)

在最受欢迎的Python中,被称为" CPython",您通常不需要with语句作为内置"垃圾收集" 功能将确定您已完成该文件并将为您关闭它。 但是其他Python实现,比如" Jython" (Java VM的Python)或" PyPy" (一个非常酷的实验系统,具有即时代码优化)可能无法为您关闭文件。 养成使用with的习惯很好,我认为它使代码很容易理解。

steveha answered 2019-08-18T23:14:58Z

61 votes

要将Python对象存储在文件中,请使用eval模块:

import pickle

a = {

'a': 1,

'b': 2

}

with open('file.txt', 'wb') as handle:

pickle.dump(a, handle)

with open('file.txt', 'rb') as handle:

b = pickle.loads(handle.read())

print a == b # True

请注意,我从未设置eval,而是将evil腌制到一个文件中,然后将其打开,并将其打开为pickle。

至于你的错误:

self.whip = open('deed.txt', 'r').read()

eval是一个字典对象。 evil包含文本,因此当您将内容pickle加载到self.whip时,self.whip将成为其自身的字符串表示形式。

您可能想要将字符串评估回Python对象:

self.whip = eval(open('deed.txt', 'r').read())

请注意eval听起来像evil.这是故意的。 请改用pickle模块。

Blender answered 2019-08-18T23:16:39Z

8 votes

我创建了自己的功能,非常好用:

def writeDict(dict, filename, sep):

with open(filename, "a") as f:

for i in dict.keys():

f.write(i + " " + sep.join([str(x) for x in dict[i]]) + "\n")

它将首先存储键名,然后存储所有值。 请注意,在这种情况下,我的dict包含整数,因此它转换为int的原因。这很可能是您需要根据自己的情况进行更改的部分。

def readDict(filename, sep):

with open(filename, "r") as f:

dict = {}

for line in f:

values = line.split(sep)

dict[values[0]] = {int(x) for x in values[1:len(values)]}

return(dict)

PascalVKooten answered 2019-08-18T23:17:13Z

4 votes

您可以遍历键值对并将其写入文件

pair = {'name': name,'location': location}

with open('F:\\twitter.json', 'a') as f:

f.writelines('{}:{}'.format(k,v) for k, v in pair.items())

f.write('\n')

Aravind Krishnakumar answered 2019-08-18T23:17:39Z

3 votes

您好有一种方法可以编写和读取字典文件,您可以将字典转换为JSON格式并快速读写,只需执行以下操作:

写日期:

import json

your_dictionary = {"some_date" : "date"}

f = open('destFile.txt', 'w+')

f.write(json.dumps(your_dictionary))

并阅读您的数据:

import json

f = open('destFile.txt', 'r')

your_dictionary = json.loads(f.read())

Manouchehr Rasouli answered 2019-08-18T23:18:19Z

python将字典写入txt文件_将一个字典写入txt文件并将其读回来?相关推荐

  1. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  2. c读取txt文件_第93天:文件读写

    文件操作中最基本的当然属于文件的读写操作.当我们利用爬虫抓取到一堆数据时,就需要进行文件写操作,将数据写入到文件当中:当我们需要对抓取到的文件内容进行筛选,获取有效信息时,需要对文件进行读操作.本文将 ...

  3. c++ 写入文件_常见数据库写入Webshell汇总

    声明 郑重声明:文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 前言 我日常被毒打,下次请师傅们轻点,没玩过就玩一遍吧,目前只 ...

  4. matlab读入txt数据_教程合集 | MATLAB文件读写(以nc与txt为例)

    周一到!我们又和大家见面啦!最近几周的主题是,有了数据,那我们怎么读写数据文件呢?气象中的特殊资料又有哪些处理方法呢?以txt和nc文件做引子,欢迎各位拍砖~ No.1 基础通用知识 读写文件时有一些 ...

  5. nodejs fs创建文件_节点FS – NodeJS创建文件,读取文件,写入文件

    nodejs fs创建文件 Node FS stands for NodeJS File System module. In my previous post, we have already dis ...

  6. java eclipse 读取文件_怎样用eclipse读写文件

    展开全部 要实现读写文件, 可以使用到e69da5e6ba9062616964757a686964616f31333337613162java中的I/O流.具体代码如下:import java.io. ...

  7. html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传

    (给DotNet加星标,提升.Net技能) 转自:学习中的苦与乐 cnblogs.com/xiongze520/p/10412693.html 现在的项目开发基本上都用到了上传文件功能,或图片,或文档 ...

  8. bat递归查找指定文件_批处理脚本遍历指定文件夹下的文件

    批处理脚本 1. 遍历指定文件夹下的文件 1.1 命令解释 命令: for [参数] %%变量名 in (匹配符) do (执行的命令) 切记:每个指令之间必须以空格隔开,in 与 ( 之间有空格,d ...

  9. 阅读java文件_阅读与阅读写文件 - Java空格

    我想从文件中读取并写入文件.输入文件如下 <0%> As I remember, Adam, it was upon this fashion bequeathed me by will ...

  10. mysql数据库重做日志文件_数据库:mysql:重做日志文件(redo log file)

    一.重做日志缓冲(redo log buffer) 1. log block 在InnoDB存储引擎中,重做日志都是以512字节进行存储的.这意味着重做日志缓存.重做日志文件都是以块(block)的方 ...

最新文章

  1. 消息队列的四大典型使用场景
  2. 超棒的微软Metro风格Logo设计
  3. Tomcat catalina.bat 原理解析
  4. Boost-QT兼容问题:#define FUSION_HASH #
  5. 计算机动画人机交互,北大计算机系多媒体与人机交互.ppt
  6. Chapter 4 : 单行函数
  7. OSPF 提升四 Network Types FRAM-RELAY
  8. oc c语言,OC之C语言的基础知识
  9. Oracle主库、备库redo日志管理
  10. Windows64位安装git
  11. 视频编解码之理论概述
  12. Java实现 N的阶乘
  13. USB device for mac
  14. 墙面有几种装修方法_墙面装修有几种方式
  15. Python基础入门:条件语句--阿里云天池
  16. 使用Arduino开发板进行语音识别
  17. 【GDOI2016模拟3.10】习用之语
  18. 享元模式--大量的飞龙
  19. Ubuntu16.04声卡配置
  20. LoadLibrary函数详细说明

热门文章

  1. 【一】最新多智能体强化学习方法【总结】
  2. 《系统工程》--课程笔记二(系统工程方法论)
  3. 如何编写一份优质的可行性研究报告
  4. matlab6序列号plp,matlab6.5PLP是什么
  5. 计算机电子设计论文,计算机毕业设计电子信息毕业设计电子信息毕业论文
  6. Ubuntu - 安装gcc
  7. tcpip详解卷一第3章(1)
  8. 在项目中使用NeatUpload
  9. sim卡没坏但苹果手机无服务_苹果8PLUS换壳导致无服务维修
  10. 13 万字 C 语言从入门到精通保姆级教程2021 年版