2018年6月25日【python学习笔记】

一、文件操作

文件 (保存数据--永久的)
文件都有后缀,不同的后缀表示不同的存储方式
文本文件(存文字信息)
二进制文件:视频文件、音频、图片
可执行文件

文本文件、二进制文件、json文件(重点)的操作

1.文件操作(对文件进行读写)

步骤(所有的文件操作都满足这三步):
1.打开文件
2.对文件进行读/写操作(读:获取文件内容; 写:修改文件内容)
3.关闭文件


python中的文件操作:
1.文本文件:open(文件路径,打开的模式,encoding(编码方式))

open函数有一个返回值:返回的就是被打开的文件句柄对象
文件句柄:就是文件的代言人,对文件句柄对象进行操作
文件路径:文件在电脑中对应的地址
1.直接写全路径(不推荐使用)
2.一般将文件放到工程中
a.文件和代码对应的.py文件在同一个目录下:路径直接写文件名
b.在工程文件夹下,但是不直接和代码文件在一个目录里面:./放文件的文件夹名/文件名
打开模式:

  'r'-->读(以读的形式打开,只能获取内容,不能修改内容)
  'w'-->文本写(以写的形式打开, 只能修改文件,不能获取文件内容)
  'a'-->文本写
  'br'-->二进制读
  'bw'-->二进制写
  'ba'-->二进制写

2文本文件

a.打开文件
f就是被打开的文件对应的文件句柄
utf-8:一种文本编码方式,是使用 1-6个字节对Unicode进行编码;
utf-8就可以编码所有国家语言对应的字符的文本
gbk:只支持中文文本编码

f = open('yy_shlie.txt', 'r', encoding='utf-8')

b.读操作
注意:对同一文件句柄对象进行操作,每读一次内容,下次在读的时候,从上次读的结束的位置往下读
read():获取文件中所有内容,并且返回
文本文件读取的结果是字符串

# result = f.read()
# print(result)    # print('hahha')   print('哈哈')

read(n):n-->指定读取的文本长度(-1:读取全部内容,n大于长度:读取所有内容)

result = f.read(10)
print(result)    # print('hah

readline():每次读一行内容

result = f.readline()
result = f.readline()
print(result)    # print('哈哈')

f.readlines():将文件中所有的内容读出来,将每一行的内容作为列表的元素返回的

result = f.readlines()
print(result)
练习:1.读取指定文件的所有内容 2.读取指定文件的所有内容(一行一行的读)
1.result = f.read(-1)
print(result)

2.while True:
    result = f.readline()
    if result == '':
        break
    # if not result:
    #     break
    # if len(result) == 0:
    #     break
    print(result)

二、修改读取的位置

读写文件,每次读完或者写完,下次再读写的时候,是接着上次读写的位置往下进行读写

避免这个问题的方法:1.重新打开文件,然后再读;2.设置读写位置
f = open('yy_shlie.txt', 'r', encoding='utf-8')

读取文件中所有的内容,下次在读就是从文件结束的位置往后读

print(f.read())

seek(偏移量):是字节数(一个字母是一个字节,一个中文汉字是两个字节)
设置读写位置为文件的开始:后边进行读操作的时候,就是从文件开始的位置往后读
注意:这个 偏移量一般设置为0,其他值容易出差错

f.seek(0)
print(f.read())

三、文本文件的写操作(修改文件内容)

1.打开文件
2.写操作
3.关闭

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

write(写的内容):文本文件中写的内容时字符串
注意:'w'-->写的时候会覆盖原文件的内容 'a'-->在原文件的内容的后面去追加内容

f.write('添加内容')

f.seek(0)  # 后面写的时候,会覆盖前面写的内容的形式去写
f.writelines(['aaa', 'bbb'])

f.close()

四、文本文件的掌握点

1.文件操作的步骤:

1.打开文件
2.操作
3.关闭

2.python中打开文件

open()函数:
open(文件路径, 打开方式, 编码方式)
文件路径:绝对地址、相对地址
打开方式:
'r'--->读(默认)
'w'--->写(1.覆盖原文件内容)
'a'--->写(在原文件内容后面追加)
文本文件的内容,对应的是字符串
读操作:注意:如果文件的路径写错了会报错:FileNotFoundError
写操作:注意:'w'、'a'打开文件,如果这个文件不存在,会创建一个新的文件

在python中国可以使用以下结构来进行文件操作过程:

with open() as 文件变量
---- 在文件打开后关闭前执行的代码段

with open('yy_shlie.txt', 'r', encoding='utf-8') as f:
    print(f.read())

五、二进制文件的操作

二进制文件的读

bytes类:python中的二进制数据对应的类型是bytes-->data

二进制文件的读'br'

with open('fyh.jpg', 'br') as f:
    data = f.read()
    print(type(data))  # <class 'bytes'>
    print(data)

二进制文件的写'bw'

with open('new.jpg', 'bw') as f:
    f.write(data)  # data需要是bytes类型的数据

二进制文件的写'ba'

with open('new1 .jpg', 'ba') as f:
    f.write(data)  # data需要是bytes类型的数据

六、json文件的读写

json文件:就是后缀是.json的文件,用来存储文本数据(以特殊的语法结构来存储文本信息)

最外层要么是字典结构,要么是列表结构
里面的数据:字符串、数字、二进制、字典、数组(列表)

格式:
{}-->字典结构

{
    "name":"aa",
    "age":18,
    "score":[100, 90, 80]
}

[]-->数组(列表)结构

[
    100,
    "name"
    "person":{"name":"张三"}
]

""-->字符串

"
    name, abc, njxdd, dfsf
"

json文件的读写:

python中使用python内置模块json来对json数据进行操作
1.读取json文件中的内容:

json.load(f):读的结果只有两种情况,要么是字典,要么是列表
json.loads(json字符串, 编码方式)--->将字典字符串转换成字典;将列表字符串转换成列表

import json
result = json.loads('{"name": "hy", "age": 2}', encoding='utf-8')
print(result, type(result))  # {'name': 'hy', 'age': 2} <class 'dict'>

with open('iKang.json', 'r', encoding='utf-8') as f:
    # print(f.read())   这样拿出来是字符串
    result = json.load(f)
    print(type(result))  # <class 'dict'>  字典
    print(result)

2.json文件的写操作

json.dump(写的内容, f):写的内容只能是字典或者列表
json.dumps(对象)--->将字典、列表转换成字符串,和loads相反

result = json.dumps([1, 2, 3, 4])
print(result, type(result))   # [1, 2, 3, 4] <class 'str'>

with open('myjson.json', 'w', encoding='utf-8') as f:
    dic1 = {'aaa': 100, 'score': 99, 'person': {'name': 'yy', 'age': 23}}  # 字典
    json.dump(dic1, f)

with open('myjson1.json', 'w', encoding='utf-8') as f:
    list1 = [10, 20, 'a', 'abc']  # 列表
    json.dump(list1, f)

with open('myjson2.json', 'w', encoding='utf-8') as f:
    tuple1 = [10, 26, 'a', 'abc', 920, 'fg']  # 元祖
    json.dump(tuple1, f)

七、学生信息持久化练习

写一个添加学生的功能,将添加的学生信息持久化
1.添加学生
2.查看学生


import json
key_name = 'name'
key_age = 'age'
key_tel = 'tel'
try:
    with open('yy_xsxx.json', 'r', encoding='utf-8') as f:
        all_students = json.load(f)
except:
    all_students = {}
输入学生信息
stu_name = input('请输入学生姓名:')
stu_age = input('请输入学生年龄:')
stu_tel = input('请输入学生电话:')
一个学生对应一个字典,多个学生用一个字典存起来
stu_dict = {
    key_name: stu_name,
    key_age: stu_age,
    key_tel: stu_tel
}
保存学生信息
all_students[stu_name] = stu_dict
保存到本地
with open('yy_xsxx.json', 'w', encoding='utf-8') as f:
    json.dump(all_students, f)
print(all_students)

八、异常捕获

在之前的学习中,由于各种原因,我们的代码会出现各种各样的错误,这些错误叫异常
如果程序出现异常,程序会崩溃,不能继续执行。
但是有的时候出现异常,我们可能希望由自己解决出现异常的问题,不希望程序崩溃,就可以去捕获异常

捕获异常:

格式1:
try:
代码块1(需要捕获异常的代码块)
except:
代码块2(出现异常后执行的)
执行过程:先执行代码块1,如果代码块1出现异常,就执行代码块2;
# 如果代码块1不出现异常,就执行try结构外的其他结构


import json
try:
    with open('yy_xsxx1.json', 'r', encoding='utf-8') as f:
        all_students = json.load(f)
except:
    print('出现异常')

格式2:

try:
    代码块1
except 错误类型列表:
    代码块2
#出现指定错误类型的异常,才会捕获

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

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,881评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 开场白 由于被拉进了一个以做硬科幻电影为目标的群,所以今天就在睡觉前写一篇相关的文章,来谈一下对于科幻中的科的作用...
    LostAbaddon阅读 23,718评论 10 17
  • chrome插件的开发其实并不难,看着官方文档来开发一般都不会有太大的问题;这里我主要整理下插件中多个页面之间通信...
    Addy_Zhou阅读 3,622评论 0 1
  • 心怀梦想的人永不衰老, 纵然斗换星移,岁月变迁, 即便那身躯,随着落叶一道, 腐朽,又化作春泥。 他的灵魂,依旧在...
    冰海寒星阅读 219评论 0 1