使用python读写文本文件内容时,我们知道如果文本文件里的内容无规律,那么修改起来比较麻烦。但是如果文本文件存储是有规律的,比如JSON格式,在利用python内置的函数把JSON格式的数据转成python字典对象之类,操作起来则非常便捷。

阅读本文需要对python文件操作有简单了解

查看python读取文件的类型

在文本文件里随意存放一些数据,然后使用python读取出来,读到的是字符串。代码演示如下:

f = open('hello.txt', mode='r', encoding='utf-8')
data = f.read()
print(type(data))
print(data)
# 输出如下:
# <class 'str'>
# hello-world
# 你好世界

演示代码文本的编码均为UTF-8

字符串与字典互转

为什么要互转呢,我们这里主要是针对文本文件的操作。我们读文本文件时读到是字符串,相应的把数据写入文本文件的时候,也是把字符串写入文本文件。但是在程序中,字符串不好操作,而类似字典这种类型的数据结构容易操作,所以需要字符串与字典互转。

需要用到json模块的俩个函数,json.dumps()json.loads()

把字典数据转成字符串并写入到文本文件中去。代码演示如下:

import json

data = {
'axing': 'qx123456',
'bxing': 'wx123456',
'cxing': 'ex123456',
'dxing': 'rx123456'
} f = open('xjson.txt', 'w')
data = json.dumps(data) # 字典转字符串
f.write(data) # 写入
f.close()

运行上面的程序,xjson.txt里的内容就会变成

{"axing": "qx123456", "bxing": "wx123456", "cxing": "ex123456", "dxing": "rx123456"}

上面代码中的扩展名txt不是必须的,换成其它文本文件扩展名也可以。刚开始不用先创建xjson.txt文件,检查到没有该文件python会自动创建的。

现在假设我们已经有一个xjson.txt文本文件,内容只有一行{"axing": "qx123456", "bxing": "wx123456", "cxing": "ex123456", "dxing": "rx123456"},现在我们需要把这段文本的最后一项修改成dxing: x2018,代码演示如下:

import json

# 修改文件里的内容
f = open('xjson.txt', 'r+')
data2 = json.loads(f.read()) # 字符串转字典
data2['dxing'] = 'x2018'
f.seek(0) # 把文件指针移动到头部
# print(f.tell())
f.write(json.dumps(data2))
f.close()

可以看到非常简单的就修改了文本文件里的内容。

小练习-模拟登录

现在我们可以利用python操作文本文件,来时实现一个登录小程序。要求账号密码存储在文件中,并且密码输入错误三次以后锁定该用户,下次使用该用户名登录时,仍然处于锁定状态。

测试数据可以使用以下代码生成。

import json

data = {
'zsheng': {
'pwd': 'z123',
'lock': 0
},
'xsheng': {
'pwd': 'x123',
'lock': 0
},
'csheng': {
'pwd': 'c123',
'lock': 0
},
'vsheng': {
'pwd': 'v123',
'lock': 0
}
} f = open('account.json', mode='w', encoding='utf-8')
data2 = json.dumps(data)
f.write(data2)
f.close()

生成的测试数据如下。

{"zsheng": {"pwd": "z123", "lock": 0}, "xsheng": {"pwd": "x123", "lock": 0}, "csheng": {"pwd": "c123", "lock": 0}, "vsheng": {"pwd": "v123", "lock": 1}}

参考实现如下

import json

f = open('account.json', mode='r+', encoding='utf-8')
data = json.loads(f.read())
count = 0 while 1:
username = input('Please input you username: ')
if username == 'q':
exit()
if username not in data:
print('Wrong username!')
continue
if username in data:
if data[username]['lock'] == 1:
print('Your account is locked! Refuse to login!')
exit()
while 1:
count += 1
if count > 3:
data[username]['lock'] = 1
# print(data)
f.seek(0)
f.write(json.dumps(data))
print('Your account is locked!')
exit() print('This is your %d time try!' % count)
password = input('Please input your password: ')
if data[username]['pwd'] == password:
print('Welcome to login %s' % username)
exit()
elif password == 'q':
exit()
else:
print('Wrong password, retry!')
continue
f.close()

使用python操作json文本文件的更多相关文章

  1. python操作json来存储简单的数据,pickle来操作复杂的数据

    json作为不同语言间进行数据交互的媒介,在当下已经渐渐取代了之前的xml,看一波python操作json # coding = ascii import json import pickle imp ...

  2. python 操作json

    认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Dece ...

  3. python操作json

    概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态 ...

  4. python操作json数据格式--基础

    非常基础的json库的用法,后续添加数据格式.编码等内容 参考文章 json进阶 Python的json模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps ...

  5. Python操作JSON数据代码示例

    #!/usr/bin/env python import json import os def json_test(): return_dic = {} json_data = { 'appid':' ...

  6. python操作json文件获取内容

    写case时,将case 写到json文件比写到,写python一定要学会处理json 以下,是要处理的json 处理操作包括:打开json文件,获取json文件内容,关闭json文件,读取内容中的对 ...

  7. python操作json文件

    import json class OperationJson(object): def __init__(self,file_name=None): if file_name: self.file_ ...

  8. python 操作json数据

    简介 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,通常是以键值对的方式呈现,其简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而 ...

  9. Python操作txt文本文件

    题目: 1.TXT文本文件中的内容为: url:http://119.23.241.154:8080/futureloan/mvc/api/member/login,mobilephone:13760 ...

随机推荐

  1. ubuntu 按键替换 Control_R to Left

    ubuntu 按键替换 Control_R to Left 1 查看当前键盘布局 $xmodmap -pke keycode 105 = Control_R NoSymbol Control_Rkey ...

  2. ie设置ActiveX控件不提示

    ie设置自动允许activex: 对安全设置-受信任的站点区域-对未标记为可安全执行脚本的ActiveX控件初始化并执形脚本(启用)

  3. 【转】Win32 创建控件风格不是Win XP解决方案

    有时候我有在用Win32 API来向窗体上添加控件时,通过CreateWindow或CreateWindowEx创建出来的控件的风格不像XP风格,而是像Windows 2000的风格,界面很难看.注意 ...

  4. 经典SQL面试题(转)

    http://www.cnblogs.com/kcher90/archive/2013/03/13/2957932.html 有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录 ...

  5. Assembly中Load, LoadFrom, LoadFile以及AppDomain, Activator类中相应函数的区别

    Assembly和AppDomain的一些关于动态加载程序集的函数有些令人头疼,但细细研究后还是可以将他们区分的. 这些函数大致可以分为四类: 第一类:加载到Load Context内 Load Co ...

  6. 【BZOJ4606】[Apio2008]DNA DP

    [BZOJ4606][Apio2008]DNA Description 分析如DNA序列这样的生命科学数据是计算机的一个有趣应用.从生物学的角度上说,DNA 是一种由腺嘌呤.胞嘧啶.鸟嘌呤和胸腺嘧啶这 ...

  7. 【BZOJ3033】太鼓达人 暴力+欧拉回路

    [BZOJ3033]太鼓达人 Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 ...

  8. 【BZOJ4636】蒟蒻的数列 STL

    [BZOJ4636]蒟蒻的数列 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个 ...

  9. Java项目使用oh-my-email发送邮件

    本文使用Github开源项目oh-my-email进行测试邮件发送,并未进行更为深度的测试,如果想要快速使用,的确是一个很好的邮件发送组件.https://github.com/biezhi/oh-m ...

  10. Angular2+ 基本知识汇总

    Angular是Google推出的Web前端开发框架,从12年发布起就受到了强烈的关注,他首次提出了双向绑定的概念,让人耳目一新. Angular 2特性 就在2016年9月中旬,时隔4年,Googl ...