文件操作

2018-07-26  本文已影响0人  文化银儿

一、模块管理函数和类

1、什么是模块

一个.py文件就是一个模块

2.import--->(导入)

可以通过import关键字导入其他的模块

格式:
import 模块名(.py文件名) --->导入模块中的所有内容

直接导入模块的时候,相当于把被导入模块里面的内容全部粘贴到import的位置

3.怎么使用模块中的内容,以及什么样的内容是可以使用的?

格式:
import 模块名
模块名. 的方式,使用模块中的内容

在模块中声明的全局变量(golbal)都可以使用(普通变量、函数、类)

import other
print(other.name)

4.from 模块名 import 内容1,内容2...

from 模块名 import 内容1,内容2... --->也可以导入模块中的指定内容

导入后会先复制一遍模块中的内容

使用内容的时候,不用再导入的变量或者函数或者类前加模块名

 from    other2    import   func2

5.if name == 'main':

if __name__ == '__main__':
是阻止被导入的模块中的不必要的代码被粘贴到当前模块;一般情况下,除了函数的声明和类的声明以外,其他的代码都放到这个if里面

name:是每个模块自带的一个属性,是用来保存当前这个模块的名字的,
但是当正在执行当前模块的时候,这个属性的值是固定的'main'

if __name__ == '__main__':
    # 这里的代码不会被其他模块使用
    pass

6.使用as重命名

(1)import 模块名 as 新的名字
(2)from 模块名 import 函数名 as 新的函数名

import   cmath   as   my_math

二、基本文件操作

(所有)文件操作流程,打开文件——操作文件(读、写)——关闭文件

1.打开文件:open(文件路径,打开方式,编码方式)

(1)文件路径(必填)--->决定打开那个文件

(2)打开方法(默认值是'r')--->决定打开文件后进行什么样的操作
<1>'r'--->读操作
<2>'rb'/'br'--->读操作(读出来的数据是二进制)
<3>'w'--->写操作(可以将文本数据写入文件中)
<4>'wb'/'bw'--->写操作(可以将二进制数据写入文件中)
<5>'a'--->写操作(追加)

(3)编码方式--->主要针对文本文件的读写(不同的操作系统默认的文本编码方式不同,windows--->gbk,mac--->utf-8)

2.文本文件读操作

(1)放在工程外面的文件,写绝对路径:C:\Users\Administrator\Desktop

(2)将文件放到工程目录下的某个位置,写相对路径(相对工程目录):./相对路径 或者 ../相对路径(推荐)
<1>工程目录下的子目录下的py文件用../相对路径打开
<2>当py文件直接放在工程目录下,想要使用open打开工程中的其他文件使用'./'
<3>当py文件在工程目录下的子目录中时,想要使用open打开工程中的其他文件使用'../'

文件.read():获取文件内容,并且返回
read(n) --> n 设置读的长度

1.打开文件,返回文件句柄(文件代言人)
    f=open('./test1.txt','r',encoding='utf-8')

2.读文件(获取文件的内容)
 ** 文件.read():获取文件内容,并且返回
read(n) --> n 设置读的长度**

    content=f.read()
    print(content)

3.关闭文件
    f.close()

3.文本文件的写操作

(1)'w':在写的时候,会清空文件中原来的内容,然后再往里面写数据
(2) 'a':在原文件内容的最后添加新的数据

(1)打开文件
    open('./test1.txt','w',encoding='utf-8')
    # print(type(f))
(2)写操作
    f.write('疑是地上霜')
(3)关闭文件
    f.close()

** 注意:
<1>以读的方式打开文件,如果文件不存在,会报错FileNotFindError
<2> 以写的方式打开文件,如果文件不存在,就会创建新的这个文件**

三、二进制文件的读写操作

音频,视屏,图片文件,都是二进制文件
(1)二进制文件的读取操作

#打开图片文件
f = open('./lufei.jpg', 'rb')

# 读文件
image_date = f.read()
print(type(image_date), image_date)
# bytes:python中二进制数据对应的数据类型

# 关闭文件
f.close()

(2)二进制文件的写操作

f = open('./new.jpg', 'wb')
f.write(image_date)
f.close()

(3)通过with关键字去打开文件

with open()as 文件变量名:
    文件操作

在文件操作结束后,会自动去关闭文件

读操作:

with open('./', 'rb') as f:
    mp4_date = f.read()

写操作:

with open('./路径', 'wb') as f:
    f.write(mp4_date)

五、json文件

数据本地化:将数据保存到本地文件中(文本,json,数据库)

json文件(文本),就是文件后缀是.json的文件,内容必须是json格式的内容

json是python中内置的一个模块,专门用来处理json数据的

json格式:
(1)内容是字符串
(2)最外层是字典,字典里面就必须是键值对
(3)最外层是数组(列表),数组里面的内容必须是数组数据
(4)最外层只能是一个字典,一个数组或者是一个字符串
(5)支持的数据类型:字符串("abc"),数字(100,1.02),布尔值(true,false),数组([1,5,"a"]),字典({key:value}),null(None)

1.json文件的读操作

(1)打开json文件

    with open('./test.json','r',encoding='utf-8') as f:
    直接使用read()去读,获取到的是字符串数据,包含了json文件中的所有内容(包含注释部分)

    load(文件对象):获取指定json文件中的内容,返回值的类型是Json文件最外层的对应数据类型
    dict--->dict
    array--->list
    string--->str
    number--->int/float
    true/flase--->True/Flase
    null--->None

    content=json.load(f)
    print(content,type(content),content['成绩'][1])

(2)json文件的写操作

    with open('./new.json','w',encoding='utf-8') as f:
**写数据**
       dump(写的内容,文件对象)
        w_centent=[
            {'name':'1','age':18},
            {'name':'2','age':20}
        ]
        json.dump(w_centent,f)

(3)json模块的其他操作
load(字符串,编码方式)--->将指定的字符串,转化成json数据
将字符串转换成字典、将字符串转换成列表

    content=json.loads('"abc"',encoding='utf-8')
    print(content,type(content))   #abc <class 'str'>

dumps(对象):
将json对象转化成json字符串、字典、列表转换成json字符串

    content=json.dumps(['a',1,True])
    print(content,type(content))   #["a", 1, true] <class 'str'>

(4)出现错误(异常)不想让程序崩溃,就可以进行异常捕获

try:
    需要捕获的异常代码
except:
    出现异常会执行的代码
try:
    需要捕获异常的代码
except 错误类型:
    捕获到指定的错误类型,才执行的代码
if __name__ == '__main__':
    try:
        with open('./aaaa.txt') as ff:
            print('打开成功')
    except FileNotFoundError:
        print('===')
        open('./aaa.txt','w')

练习:输入学生的姓名和电话,保存到本地,(要求下次启动程序,再添加学生的时候,之前添加的还在)

name=input('姓名:')
tel=input('电话:')
student={'name':name,'tel':tel}
with open('./student.json', 'r', encoding='utf-8') as f:
    all_students=json.load(f)

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

汇总

'''
1.模块(掌握)
导入模块(自定义模块,第三方模块,系统的其他模块)
import 模块---->模块.内容
from 模块 import 内容 --->内容

被导入的模块中,除了声明在if __name__=='___main__':判断中的内容以外的塔器全局的
被导入模块是:if语句外面的,全局的才可以使用

2.文件操作
打开文件--操作文件--关闭文件
open()   close() 
--->with open() as 文件:
        操作文件
        
open(文件路径,打开方式--->不写默认('r'),编码方式--->二进制文件不能设置)

文本文件--->读'r'、写'w'(会清空之前内容)/'a'(追加)
二进制文件--->'rb'、'wb'
以读的形式打开文件,如果文件不存在会报错,以写的方式打开文件,如果文件不存在,会在指定路径下创建该文件

read()--->读文件中所有的内容
write()--->将内容添加到文件中


3.json文件(文本文件)
json支持的数据类型和其对应的字面量
字符串--->""(必须双引号)
数字--->整数、小数
布尔--->true、false(必须小写)
数组(array)--->[12,"a",true,{"a":1}]
字典(object)--->{"name":12,"age":[1,2,3]}
null--->null(空)


import json

读:json.load(json文件对象)--->读出来的数据类型和json中对应的类型是一样的额,可以直接读出字典列表等数据
写:json.dump(要写入文件中的数据,json文对象)--->python中的基本数据类型,
都可直接写到json文件中,(python中写True,转到json中变为true)


4.异常捕获
捕获异常从上往下执行

try:
    需要捕获异常的代码(就是这段代码出现异常,但不让程序奔溃)
except:
    只要try后面的代码出现异常,都会执行这段代码,并且程序不会崩溃
其他代码
    

try:
    需要捕获异常的代码块
except 异常类型:
    出现指定异常后才会执行
其他代码

try---except执行过程:先执行try后面的代码块,只要出现异常就使用except去捕获,如果能捕获到,就直接进入except中
                    然后就执行里面的代码块,执行完成后,在执行后面的其他语句,如果捕获不到,就直接报错,如果代码块
                    中没有异常,那么执行完代码块中的内容直接执行后面的其他语句


想要同时捕获多个异常:except(错误类型1,错误类型2....):


try:
    代码块1
except:
    代码块2
finally:
    代码块3
    
finally后的代码块,和其他代码块执行条件相同

raise:抛出异常


总结:
1、异常捕获,不是什么时候都用,只有在程序员清楚会出现异常,并且想要自己来处理异常,而不是让程序奔溃才异常捕获
2、使用异常捕获的时候,不能让except直接捕获所有的异常,而是捕获特定异常

'''
if __name__ == '__main__':

    try:
        # open('aaa.txt')
        print({'a': 'b', 'b': 1}['c'])
    except (IndexError, KeyError):
        print('出现异常')

    # print('异常捕获结束后')
    # finally:
    #     print('异常捕获结束后')
    while True:
        try:
            number = int(input('请输入数字:'))
            break
        except ValueError:
            print('输入有误!')

    print(number)

上一篇下一篇

猜你喜欢

热点阅读