4-Python 文件与模块

4.1文件

我们人类具有长期记忆以及短时的记忆,同样的电脑也是有短时记忆以及长期记忆,短时记忆我们可以理解为计算机的运行内存,具有高效短时运算的文件记忆功能,长期记忆我们可以理解我们的电脑用于储存的机械硬盘,用于数据存储的。

OPEN函数

Pyhon open()函数用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用这个函数

为了测试Python中的文件操作,先在文件目录中创建一个内容为“hello world”的test.txt文件

  • WINDOWS:echo HELLO WORLD > test.xt

open(file,mode)函数主要有两个参数file、mode。FILE为需要读写文件的路径。mode为读取文件时的模式,常用的模式有以下几个:

  • r:以字符串的形式读取文件
  • rb:以二进制的形态读取文件
  • w:写入文件
  • a:追加写入文件
## 以字符串的形式读取文件
file=open('test','r')
print(type(file))
<class '_io.TextIOWrapper'>
## 通过read读取整个文件
content=file.read()
print(content)
hello world 
## 通过readline读取文件的第一行
content1=file.readline()
print(content1)

什么都没输出
这是因为open函数返回的是一个指针,我们第一次执行file.read()操作后,由于读取了整个文件,这个指针已经来到了文件末尾,因此file.readline()没有获取到文件的内容。这种情况我们可以通过close方法关闭文件后重新打开。

## 读取文件后需要关闭文件
file.close()
file=open('test','r')
content=file.readline()
print(content)
hello world 

因此我们操作文件时,一定需要注意每次操作后,及时通过close()方法关闭文件

file.close()
## 通过 w 模式打开文件test
file=open('test','w')
## 创建写入的字符串的文件变量
content='Hello liuwei!\nHello Python!!\n'
## 写入到test文件中
file.write(content)
## 关闭软件
file.close()
## 打开文件看下文件内现在的文件,
file=open('test','r')
content=file.read()
print(content)
Hello liuwei!
Hello Python!!
file.close()

需要注意在上述操作中,w模式会覆盖之前的文件。如果你想在文件后面追加内容,可以试用a模式操作追加

## 以a模式打开文件test
file=open('test','a')
## 创建需要追加的字符串变量
content='Hello smart way!!!'
## 写入到test文件中
file.write(content)
file.close()

4.2模块

在之前,我们说了Python里面一切皆是对象,那么我们也可以把一段程序代码改成一个对象,在另外的地方直接调用,这样的代码我们可以说叫做模块。
编写模块的方式很多,其中最简单的模块就是创建一个包容很多函数、变量以及类并以.py为后缀的条件。
下面我们把上一节中实现的class类保存在student.py文件中:

file=open('student.py','w',encoding="utf-8")
file.write("""class  student():
    ## 为对象进行初始化赋值
    def __init__(self,name,Math_score,Chinese_score):
        self.name=name
        self.Math_score=Math_score
        self.Chinese_score=Chinese_score
        
    ## repr 函数用于定义对象被输出时的输出结果
    def __repr__(self):
        return str((self.name,self.Math_score,self.Chinese_score))
    ## 更新成绩
    def chang_score(self,course_name,score):
        if course_name=='Math':
            self.Math_score=score
        elif course_name=='Chinese':
            self.Chinese_score=score
        else:
            print(course.name,"course is still not in current system")
            
    ## 
    def print_name(self,):
        print(self.name)
        
    name='Undefined'
    Math_score=None
    Chinese_score=None""")
file.close()

使用import 关键字可以把一个模块引入到一个程序来使用它的功能。记得在上一节中我们说过一个程序也可以是一个对象,这时 student.py 程序就成了一个对象,而里面的 student 类便成了它的对象变量

import student

这里的导入就是student的这个程序的,读取student程序里面的student类

xiaohu=student.student('XiaoHu',65,55)
print(xiaohu)
('XiaoHu', 65, 55)

通过student.py这个模块,我们不需要重复编写这串代码,可以直接使用student类!正因为有了这个模块,才能使得数据科学中复杂的算法与模型可以封装到模块中,用户只需要使用模块中定义好的函数与类。
当我们只需要模块中的几个函数或类时,也可以采用from model_name import xxx的写法导入指定部分:

## 仅导入student类
from student import student
## 这时直接通过类名,不需要使用模块名
xiaohu=student('XiaoHu',65,55)
print(xiaohu)
('XiaoHu', 65, 55)
import math
## 通过math.log 计算数值的对数
print(math.log(xiaohu.Math_score))
4.174387269895637
import time
## 通过time 库中多个方法获取当前时间
## time.time获取当前时间的unix时间戳
## time.loacltime把当前时间的unix时间戳按照时间划分
## time.asctime把按时区划分的时间戳转化成标准日期格式
print(time.asctime(time.localtime(time.time())))
Wed Aug  2 17:15:10 2023

除此之外,Python还有很多标准库值得我们区探索。例如re库可以实现字符串正则表达式的匹配,random用来生成随机数,urllib用来访问互联网

4.3练习

4.3.1学生信息本地储存

之前我们实现了学生信息的“增删查改”功能,现在希望通过文件系统保存学生的信息,每次打开程序时可以载入,关闭程序时可以保存。

4.3.1Python之禅

首先在这里恭喜各位同学完成了 Python 的全部学习内容!在这四章中希望你可以体会到本教程简洁明快的风格,这种风格与 Python 本身的代码设计风格是一致的。在 Tim Peters 编写的 “Python 之禅” 中的核心指导原则就是 “Simple is better than complex”。

纵观历史,你会看到苹果创始人史蒂夫·乔布斯对 Less is More 的追求,看到无印良品“删繁就简,去其浮华”的核心设计理念,看到山下英子在《断舍离》中对生活做减法的观点,甚至看到苏东坡“竹杖芒鞋轻胜马,一蓑烟雨任平生”的人生态度。你会发现极简主义不只存在于 Python 编程中,它本就是这个世界优雅的一条运行法则。

本练习让我们导入 this 模块,用心体会一下 Python 的设计原则。

import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值