美文网首页
DAY11 Python基础:files and operati

DAY11 Python基础:files and operati

作者: 十二右 | 来源:发表于2018-06-26 00:18 被阅读0次

01-file operations 文件操作

02-modify the read position 修改读取的位置

03-file write operation 文件写操作

04-binary file operation 二进制文件操作

05-json file json文件

06-student information persistence 学生信息持久化

07-exception catching 异常捕获


01-file operations 文件操作

文件:都有后缀,不同的后缀表示不同的存储方式(保存数据--永久的)
文本文件(存文字信息) -----.txt, .word, .md等
二进制文件:视频、音频、图片-----.mp4, ,.mov, .mp3, .png, .jpg, .gif
可执行文件等:-----.exe, .api, .dmg等

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

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

python操作文件:

1.1.打开文件

open(文件路径,打开的模式 = 'r')
open函数有一个返回值:返回的就是被打开的文件句柄对象
文件句柄:就是文件的代言人,对文件句柄对象进行的操作,就相当于对文件进行操作

文件路径:文件在电脑中对应的地址

1.1.1.直接写全路径(不推荐使用)

1.1.2.一般将涉及到的文件放到工程中:

a.文件和代码对应的.py文件在一个目录下,路径直接写文件名
b.在工程文件夹下,但是不直接和代码文件在一个目录里面:./放文件的文件夹名字/文件名

打开的模式:
'r'->文本读(以读的形式打开,只能获取内容,不能修改内容)
'w'->文本写(以写的形式打开,只能修改内容,不能获取内容;会覆盖原来的内容)
'a' ->文本写(以写的形式打开,只能修改内容,不能获取内容;会加到原来内容后面)
'br'->二进制读
'bw'->二进制写
'ba'->二进制写

1.2.文本文件

a.打开文件

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

f = open('./test/test.py','r')
g = open('./test/test2.txt', 'r', encoding='utf-8')

b.读操作

注意:对同一个文件句柄对象进行读操作,每读一次内容,下次再读的时候,从上次读的结束对位置往下读

read():获取文件中所有的内容,并且返回
文本文件读取的结果是字符串

result = f.read()
print(result)

# result2 = g.read()
# print(result2)

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

# result2 = g.read(10)
# print('===',result2)

readline():每次读一行内容

# result3 = g.readline(1)
# print('>>>',result3)

练习:1.读取指定文件的所有内容 2.读取指定文件所有内容(一行一行的读)

# 1.
# re = g.read()
# print(re)
# 2.
while True:
    re = g.readline()
    # if re == '':
    #     break
    if not re:
        break
    print('>>',re)

# 关闭文件
g.close()

readlinse():让文件中每一行内容作为列表元素返回

g = open('./test/test2.txt', 'r', encoding='utf-8')

re = g.readlines()
print(re)

02-modify the read position 修改读取的位置

读写文件,每次读完或者写完,下次再读的时候,是接着上次读完的位置往下进行读操作
避免这个问题的方法:1.重新打开文件,然后再读 2.设置读写位置

f = open('./test/test2.txt', 'r', encoding='utf-8')
d读取文件中所有的内容,下次再读就是从文件结束的位置往下读
print(f.read())

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

f.seek(0)
print('>>>', f.read())
f.close()

03-file write operation 文件写操作

写操作(修改文件内容):
1.打开文件
2.写操作
3.关闭

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

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

f.write('举头望明月')
f.seek(0)   # 后面写的时候,会以覆盖前面写的内容的形式去写
f.writelines(['aaaa', 'dgdsag', 'agag', ' satett'])
f.close()

04-binary file operation 二进制文件操作

4.1二进制文件的读

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

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

4.2二进制文件的写

'ba':无追加的效果

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

05-json file json文件

json文件 :就是后缀是.json的文件,用来存储文本数据(以特殊的语法结构来存储文本信息)
最外层要么是字典,要么是数组(列表)结构
里面的数据:字符串、数字、二进制、字典、数组(列表)
{} ->字典结构
{
'name':'a',
'age':21,
'sore':34
}
[]->数组(列表)结构
[
190,
'name',
'person':{'name':'a','age':21,'sore':34}
]

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

import json

5.1读取json文件中的内容

json.load(f):读取的结果是字典(dict)或者列表(list)

with open('./test/ikang.json', 'r', encoding='utf-8') as f:
    # data = f.read()
    # print(type(data))  # value: <class 'str'> 字符串形式的值
    result = json.load(f)
    print(type(result))     #value:<class 'dict'> 这样输出的内容方便操作
    print(result)

5.2json文件的写操作:

json.dump(写的内容,f):写的内容通常是字典或者列表

with open('./test/myjson.json', 'w', encoding='utf-8') as f:
    dict1 = {
        'name': 'a',
        'age': 21,
        'sore': 34
    }
    list1 = [
    190,
    'name',
    'person',{'name':'a','age':21,'sore':34}
            ]
    str1 = 'this is a normal string'
    toupl1 = ('a', 100, 0, True)
    json.dump(str1,f, indent=2, ensure_ascii=False)  #indent= 2 -->字符缩进个数,使格式更清晰 ; ensure_ascii=False 是中文数据存到文件里依旧是中文

loads 字符串转换成python里的字典或列表格式
dumps python里的字典或列表格式转换成字符串

也可以存字符串 -->“this is a string ”
也可以存元组,-->在json文件里是列表[]

06-student information persistence 学生信息持久化

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

import json
key_name = 'name'
key_age = 'age'
# all_students = {}
# 创建一个json文件,并取出字典,进行存储
try:
    with open('student.json', 'r', encoding='utf-8') as f:
        all_students = json.load(f)
except FileNotFoundError:
    all_students = {}
# 输入学生信息
stu_name = input('请输入学生姓名:')
stu_age = input('请输入学生年龄:')
stu_dict = {
    key_name:stu_name,
    key_age:stu_age,

}
all_students[stu_name] = stu_dict

with open('student.json', 'w', encoding='utf-8') as f:
    json.dump(all_students,f)

07-exception catching 异常捕获

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

捕获异常:
格式1:

try:
    代码块1:需要捕获异常的代码块
except:         # 所有类型错误的异常都会捕获
    代码块2(出现异常后执行的代码块)

执行过程:先执行代码块1,如果执行代码块1的时候出现异常,就执行代码块2;
如果代码块1不出现异常,就执行try结构外的其他语句

# IndexError:
# FileNotFoundError:
# ValueError:
try:
    print(int('12sd'))
    # with open('./test/test1.json', 'r', encoding='utf-8') as f:
    #     pass
except:
    print("出现异常了")
print('>>>')

格式2:出现指定类型错误的异常,才捕获

try:
    代码块1
except 错误类型列表:
    代码块2
try:
    with open('./test/test1.json', 'r', encoding='utf-8') as f:
       pass
    print(int('abc'))
except FileNotFoundError:
    print("出现文件找不到异常了")
# except ValueError:
#     print('值错误异常')
finally:
    print('不管有没有异常都有执行')
print('>>>')

格式3:输出异常内容

相关文章

网友评论

      本文标题:DAY11 Python基础:files and operati

      本文链接:https://www.haomeiwen.com/subject/kbnyyftx.html