day 12 笔记 文件的操作

一 复习

1.函数作为变量

  • 实参高阶函数、返回值高阶函数
  • 列表.sort(),sorted(),max(),min(),函数中的key
  • key 要求是一个函数、有一个参数、有一个返回值

2.迭代器和生成器

1)迭代器(iter):将其他序列转换成迭代器,生成器
获取元素:next(),for - in
2)生成器:调用一个带有yield关键字的函数,就可以得到一个生成器。

一个生成器能够产生多少数据,看函数执行完遇到多少次yield
注意: 每次都要保存生成器

二 生成式

生成式本质还是生成器,只是写法更简洁

1)生成式的写法:

  • a.语法一:
    (表达式 for 变量 in 序列)------- 生成式写法一

  • b.展开
    def func():
    for 变量 in range:
    yield 表达式

  • c.说明:
    () ---- 固定写法
    表达式 ---- 除了赋值语句以外的任何语句,比如:数据、赋值过的变量、运算表达式、函数调用表达式等
    这个表达式一般都和后面的变量有联系。
2)语法二
  • a.语法
    (表达式 for 变量 in 序列 if 条件语句)
  • b.展开
    def func():
    for 变量 in 序列:
    if 条件语句:
    yield 表达式
3)补充:python的三目运算符

python ---值1 if 条件语句 else 值2

例如:
gen1 = (10 for x in range(5))
用一句话实现key 和 value的交换
dict1 = {'a':1,'b':2,'c':3}
gen2 = ((value,key) for key,value in dict1.items())
print(dict(gen2))
练习:实现自己的dict函数,可以将序列转换成字典。
def func1(n):
    list1 = {}
    for num in n:
        list2 = list(num)
        list1[list2[0]]=list2[1]
    return list1

print('=========语法二=======')
gen3= ('str%d' % x for x in range(15) if x % 2)

三 数据的持久化

1.数据持久化
程序中产生的数据默认保存在内存中,程序结束数据会自动销毁。如果需要程序结束希望数据不销毁那么就需要对这个数据做数据持久化
数据持久化:将数据保存到文件中,然后将文件保存到磁盘/硬盘中
2.文件操作(文件内容进行操作)
  • 基本步骤:打开文件--->操作文件(读/写)--->关闭文件(文件对象.close)

  • 1)打开文件
    open(file,mode='r',encodeing = None)---以指定方式打开文件,并且返回文件对象

说明:
file --- 文件路径,可以写绝对路径,也可以写相对路径
绝对路径(一般不用) ----完整路径,例如:D:\Python 作业及练习\day12 文件操作
相对文件(需要先将文件保存在工程目录下)
./ ----代表当前目录
../ ----当前目录的上层目录
依次类推
注意:当前目录指的是当前代码所在的文件对应的目录,如果只有一个点可以省略。

mode ----字符串,文件打开的方式(决定打开文件后能够进行的操作,和操作方式)
‘r’ --- 以只读的方式打开文件,读出来的数据是字符串类型
'w' ---- 以只写的方式打开文件,写入的数据是字符串(覆盖源文件的内容)
‘rb/br’ --- 以只读的方式打开文件,读出来的是二进制数据
‘wb/bw’---- 以只写的方式打开文件,写入的是二进制数据
‘a’ ------以只写的方式打开文件,写入的是字符串,(在原文件后面添加内容)

注意:如果以读的方式打开文件,文件不存在会报错
如果以写的方式打开文件,文件不存在不会报错,并且会自动创建

encoding -- 字符, 文本的编码方式
‘utf-8’(mac) --- 支持中文
‘gbk’(windows) ---- 只支持英文

        注意:只有文本文件才能设置encoding,二进制操作不能设置encoding

'''
print('===========打开文件===========')

#使用绝对路径打开test.txt文件
open('D:\Python 作业及练习\day12 文件操作/test.txt')
# open('./test.txt')=open('/test.txt')


# 保存文件对象,只有打开文件才能得到文件对象
f = open('test.txt','r',encoding='utf-8')

 f.close()
  • 2)操作文件

  • 1.读操作:1)文件对象.read() -------返回文件内容(从读写位置获取到文件结尾)

    1. 文件对象.readline() -----读到一行结尾

设置读写位置在文章开头
f.seek(0)

f = open('test.txt','r',encoding='utf-8')
content = f.read()
print(content)
# 读不到内容的时候返回空串

f = open('test.txt','r',encoding='utf-8')
print(f.readline())
print(f.readline())
练习:读一个本地的txt文件,一行一行的读,读完为止
a = open('test.txt','r',encoding='utf-8')
while True:
    content = f.readline()
    print(content)
    if not content:
        break
  • 2.写操作:
    文件对象.write(内容) ---将内容写入指定文件

注意:
'w'/'a' -内容要求是二进制(bytes)
‘wb’/'bw' --- 二进制形式

f = open('test.txt','w',encoding='utf-8')

f.write('世人皆说官人好,没关系,当不了。\n常加班,起不早,挣的不够去搓澡。\nBUG、CODE知多少,只是屏幕显人老。')
  • 3.字节类型(bytes)
    • 1)数据来源:
      a.将其他类型转换成bytes类型:
      整型、字符串都可以转换成字节类型
      b.以'rb'/'br'的方式读文件
bytes(10)
# 字符串转bytes
b=bytes('你好',encoding='utf-8')
print(b)
bytes('你好'.encode())

# 将bytes转换成字符串
b=bytes('你好',encoding='utf-8')
str1 = str(b,encoding='utf-8')
print(str1)
3.二进制文件的读写

图片、视频、音频等都是二进制文件,这些只能以带’b‘的方式打开文件然后操作

image_f = open('file/屏保2.png','rb')
image_date = image_f.read()

n = open ('new_p','wb')
n.write(image_date)
print(n.write(image_date))

打开文件的命令:
with open() as 文件对象:
文件的操作

2.数据持久化
  • 0.要为这个数据创建对应的本地文件
  • 1.程序中需要这个数据的值得时候从文件中取读这个数据的值
  • 2.这个数据的值发生改变以后,要将最新的数据更新到本地文件中
练习:统计程序启动次数
# 1.将数据从文件中读出来
with open('count.txt','r',encoding='utf-8') as n:
    count = int(n.read())
# 2.更新数据
count += 1
print(count)
# 3.更新文件
with open('count.txt','w',encoding='utf-8') as n:
    n.write(str(count))

四 json

json的引用:import json

1.什么是json数据(很重要,很实用)
满足json格式要求的数据就是json数据;文件内容满足json格式要求,就是json文件
  • 1)json格式要求:a.一个json中有且只有一个数据 b.这个数据必须是json支持的数据类型数据

  • 2)json支持的数据类型

    • a.数字类型(number) ---包含所有的数字(整数,小数),支持科学计数法
    • b.字符串(string) ---使用双引号引起来的字符集,支持转义字符,例如:"asd", "qwe\n12", "qwe\n12\u4e00"
    • c.布尔(boolean) ----只有true,false两个
      数组(array) ----相当于python中的列表,[1,"qwe",true,[1,2]]
      d.字典(dictionary) ----相当于pytho中的字典,但是key值必须是字符串{"name":"xioamin","age":12}
      null -----------------相当于None ,空值
2.python数据和json数据的相互转换
python中内置了一个json模块,用来支持json操作
1)json转python
json            (转)               python
数字                                 int/float
字符串                                str,有可能将双引号变成单引号
布尔                                  bool,true--->True,  false--->False
数组                                  list
字典                                   dict
null                                   None


  • 2)
    json.loads(字符串、encoding='utf-8') ----将json字符串转换成python对应的数据
    注意:这儿的字符串要求字符串中的内容必须是json格式的数据(去掉字符串外面的引号,本身就是一个json数据)
result=json.loads('"asd"',encoding='utf-8')
print(result)
result1=json.loads('true',encoding='utf-8')
print(result1)
result2=json.loads('[12,32,"qwe",null]',encoding='utf-8')
print(result2)

3)puthon 转json
python             (转)         json
int/float                       数字
bool                            布尔,True--->true,False--->false
str                             字符串,单引号变双引号
list/tuple                      数组
dict                            字典
None                            null
4)json.dumps(数据) 将python数据转换成json格式的字符串
result4=json.dumps(100)
print(result4)
result5=json.dumps('hello')
print(result5)

result6=json.dumps({'asd':12,'weed':'xaso'})
print(result6)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,730评论 0 8
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,093评论 0 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,961评论 1 3
  • 最近这段时间状态不太好,有时候太不好。 工作的事情一直很多,几个单子叠在一起,每天还要处理一些新的事情,就觉得不仅...
    娜佳_eae4阅读 510评论 1 1
  • 梦到自己生了双胞胎兄弟,抱着其中一个,另一个不知所踪,抱着孩子那一刻,心里是难受的,可见孩子根本不是现在的我想要的
    mountainous阅读 145评论 0 0