一.模块简介
概念:在pythn中一个PY文件就是一个模块
引入: 1.import 模块名 2.import 模块名 as 新命名
[注意] : 引用n次模块,但是模块只能被调用一次
主文件:
import test_m
这是我的第一个模块 //运行结果
test_m.py文件
print("这是我的第一个模块")
模块的是使用:
访问变量:模块名.变量名
访问函数:模块名.函数名
访问类:模块名.类名
-->模块文件test_m.py
a =10
b =20 # 变量
def f1(): # 函数
print("hello")
class Person(): # 类
def __init__(self,name):
self._name = name
def speak(self):
print("大家好,我是小黑!")
p1 = Person("小黑")
主文件:
import test_m //[注意]:这种导入方法模块文件里面的变量函数都能够被访问
print(test_m.a) # 10
print(test_m.f1()) #hello
print(test_m.p1._name) #小黑
print(test_m.p1.speak()) #大家好,我是小黑!
有时候只需要访问其中的一部分内容
from XXX(模块名) import 变量/函数名
from XXX(模块名) import *
**__name__ : 可以获取当前模块的名字,如果当前文件(运行的文件)是主文件,它的名字是__main__
二.文件操作
文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作 文件也叫I/O(Input/Output)
-->打开 open()
-->在同一目录下打开文件
# 创建变量保存文件的名字
file_name ="abc.txt"
a =open(file_name)
# open函数有返回值,即当前对象
print(a)
# <_io.TextIOWrapper name='abc.txt' mode='r' encoding='cp936'>
-->在不同目录下打开文件
file2_name = 'xiaohei.txt'
file2_name =r"C:\Users\User\Desktop\xiaohei.txt" #路径中不要出现中文
open(file2_name)
-->读取 read()
open代开的文件类型有两种
1.纯文本(使用UTF-8编写的),open()函数默认打开文件形式
2.二进制文件(图片,音频,视频)
f_name ='cts.txt'
try:
with open(f_name,encoding='utf-8')as f_obj:
cont = f_obj.read()
print(cont)
except FileNotFoundError:
print(f'{f_name}不存在')
# UnicodeDecodeError: 'gbk' codec can't decode byte 0xb6 in position 14: illegal multibyte sequence,没有指定编码格式utf-8的情况下
# 九月九日时
# 黎元减圣忧
# 追我复追君
# 夕夕都成玦
read()是把 文件中的内容全部读取,所以如果文件较大,不要直接使用read()
可以位read()函数里的size属性赋值,读取指定数量的字符,size = -1(默认值,读取全部内容)
如果字符数小于size的值,还是会全部读取
示例如下:
try:
with open(f_name,encoding='utf-8')as f_obj:
chunk =6 #指定四则大小
while True:
content = f_obj.read(chunk)
print(content)
if not content:
break
except FileNotFoundError:
print(f'{f_name}不存在')
# 其它读取大文件的方式
with open(f_name,encoding='utf-8')as f_obj:
# readline()读一行内容
print(f_obj.readline(),end='')
# 九月九日时
-->写入 write()
f_name ='cts.txt'
with open(f_name,'w',encoding='utf-8')as f_obj:
f_obj.write('九月初九日,黎首见帝业,追随探灵怪,夕殿下珠帘')
# io.UnsupportedOperation: not writable
# 使用open()函数不指定操作类型,那么文件是只读模式,不能向文件中写入内容
# r 表示只读(默认) w 表示写入(不要写入纯数字)
# 如果文件中没有内容就写入内容,否则会覆盖原内容,返回值是写入的字符个数
-->关闭 close()
file_name ='abc.txt'
file_obj =open(file_name)
# 读取文件内容 read(),读取的内容以字符串返回
content = file_obj.read()
print(content,type(content))
# ajkavauyvunaknv <class 'str'>
# 关闭文件 .close()
file_obj.close()
content = file_obj.read()
print(content,type(content))
# ValueError: I/O operation on closed file. # 说明文件成功关闭
-->忘记close()的解决措施with...as...--专门位文件设置
一旦with...as...语句结束,文件自动关闭
file_name ='abc.txt'
file_obj =open(file_name)
with open(file_name)as file_obj:
content = file_obj.read()
print(content)
print(file_obj.read()) #ValueError: I/O operation on closed file.
-->与异常处理结合操作
file_name ='abc1.txt'
try:
with open(file_name)as file_obj:
content = file_obj.read()
print(content)
except FileNotFoundError:
print(f'{file_name}文件不存在')
# abc1.txt文件不存在
-->二进制文件的读写
读取方式:
t:读取文本文件(默认)
b:读取二进制文件
# file_name = r'C:\Users\User\Desktop\blackCat_expression.mp3'
# try:
# with open(file_name,'rb') as file_obj:
# print(file_obj.read(100))
# except FileNotFoundError:
# print(f'{file_name}不存在')
# 模式未指定为rb
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 21: illegal multibyte sequence
# 模式指定为rb b"ID3\x03\x00\x00\x00\x01{lTSSE\x00\x00\x00\x1d\x00\x00\x01\xff\xfeL\x00a\x00v\x00f\x005\x007\x00.\x008\x003\x00.\x001\x000\x000\x00COMM\x00\x00\x02s\x00\x00\x00XXX\x00163 key(Don't modify):L64FU3W4YxX3ZF"
-->将读取的二进制文件写成MP3文件
file_name =r'C:\Users\User\Desktop\blackCat_expression.mp3'
with open(file_name,'rb')as file_obj:
new_name ='blackCat_expression.mp3'
with open(new_name,'wb')as new_obj:
chunk =100 *1024 #指定读取大小
while True:
cont = file_obj.read(chunk)
if not cont:
break
new_obj.write(cont)