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

2018-06-25  本文已影响0人  SlashLife

一、文件操作

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

文本文件、二进制文件、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('不管有没有异常都要执行')
上一篇 下一篇

猜你喜欢

热点阅读