Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(二):面向对象—这是一封浪漫的情书(2)(九)

简介: 玩转Python语法(二):面向对象

5.4 文件对象常用的方法

方法名 说明
read([size]) 从文件中读取 size 个字节或字符的内容返回。若省略 [size],则读取到文件末尾,即一次读取文件所有内容
readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入到列表返回
write(str) 将字符串 str 内容写入文件
writelines(s_list) 将字符串列表 s_list 写入文本文件,不添加换行符

seek(offset[, whence])

把文件指针移动到新的位置,offset 表示相对于 whence 的位置:offset:为正往结束方向移动,为负往开始方向移动;whence 不同的值代表不同含义:0:从文件头开始计算(默认值);1:从当前位置开始计算;2:从文件尾开始计算
tell() 返回文件指针的当前位置
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源

下面的代码请读者自己于本地运行输出结果:

file = open('a.txt', 'r', encoding='utf-8')
print(file.read())
file.close()
file = open('a.txt', 'r', encoding='utf-8')
print(file.read(3))
file.close()
file = open('a.txt', 'r', encoding='utf-8')
print(file.readline())
file.close()
file = open('a.txt', 'r', encoding='utf-8')
print(file.readlines())
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 23:40
# 欢迎大家关注AIoT相关博客~
file = open('c.txt', 'w', encoding='utf-8')
file.write('hello 辰chen')
list = ['Python', 'C', 'C++', 'Java', 'go']
file.writelines(list)
file.close()

运行结束后,c.txt 的内容为:

hello 辰chenPythonCC++Javago
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 23:51
# 欢迎大家关注AIoT相关博客~
file = open('a.txt', 'r', encoding='utf-8')
file.seek(3) # 注意,如果采用utf-8,因为中文占3个字节,故如果你的文件内容是汉字,需为3的倍数
# 上一行代码其实就是跳过第一个汉字,从第二个汉字开始
print(file.read())
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:14
# 欢迎大家关注AIoT相关博客~
file = open('b.txt', 'r', encoding='utf-8')
file.seek(3)
print(file.read())
print(file.tell())
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:21
# 欢迎大家关注AIoT相关博客~
file = open('b.txt', 'w', encoding='utf-8')
file.write('hello')
file.flush()
file.write(' world')
# 程序不报错,flush操作后仍能继续写入内容
file.close()
# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:21
# 欢迎大家关注AIoT相关博客~
file = open('b.txt', 'w', encoding='utf-8')
file.write('hello')
file.close()
file.write(' world')
# 程序报错,close操作后不能继续写入内容
file.flush()

5.5 with语句(上下文管理器)

🚩with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的

我们直接上代码:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:36
# 欢迎大家关注AIoT相关博客~
with open('a.txt','r', encoding='utf-8') as file:
    print(file.read())

image.png

可以看出,在使用了 with 语句之后,我们可以不用手写 close,会自动关闭文件资源。

with 语句的使用语法:

with open() as 文件名
  语句体
当然也有:
with 类方法 as 对象
一个类对象,实现了\_\_enter\_\_(),\_\_exit\_\_()这两个特殊方法
称这个类对象遵守上下文管理协议,而这个类的实例对象被称为上下文管理器
我们把 with 语句之后的,as语句之前的:open(), 类方法 被称为上下文表达式,结果为上下文管理器

下面我们用一个类对象去介绍:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:36
# 欢迎大家关注AIoT相关博客~
'''
MyContentMgr实现了特殊方法__enter__(),__exit__()称为该类对象遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器
'''
class MyContentMgr(object):
    def __enter__(self):
        print('enter方法被调用执行了')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit方法被调用执行了')
    def show(self):
        print('show方法被调用执行了')
with  MyContentMgr() as file:    #相当于file=MyContentMgr()
    file.show()

image.png

我们在最开头说过,无论什么原因跳出 with 块,都能确保文件正常的关闭,即不论发生什么,我们都会执行__enter__(),__exit__(),我们来给上述代码搞点破坏,看看能不能还执行这两个特殊方法:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 9:36
# 欢迎大家关注AIoT相关博客~
'''
MyContentMgr实现了特殊方法__enter__(),__exit__()称为该类对象遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器
'''
class MyContentMgr(object):
    def __enter__(self):
        print('enter方法被调用执行了')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit方法被调用执行了')
    # 在 show() 中加入 1 / 0
    def show(self):
        print('show方法被调用执行了', 1 / 0)
with  MyContentMgr() as file:    #相当于file=MyContentMgr()
    file.show()

image.png

可以看到,虽然抛出异常,但是我们的 enter方法和exit方法还是执行了。

我们在后续涉及到文件处理的时候,要尽量去使用 with语句。


5.6 目录操作

1.os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。

2.os模块与os.path模块用于对目录或文件进行操作


5.6.1 os模块

🚩os模块操作目录相关函数


函数 说明
getcwd() 返回当前的工作目录
listdir(path) 返回指定路径下的文件和目录信息
mkdir(path[,mode]) 创建目录
makedirs(path1/path2...[,mode]) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2......) 删除多级目录
chdir(path) 将path设置为当前工作目录

这些函数如果你学过 linux,那么你会觉得很熟悉,其实也没什么区别,只不过是用 Python 去使用了一些操作指令,大家可以自行在 PyCharm 中调用这些函数,这里不再赘述。

执行操作系统的内容:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 10:17
# 欢迎大家关注AIoT相关博客~
# os模块与操作系统相关的一个模块
import os
os.system('notepad.exe') # 打开记事本
os.system('calc.exe')   # 打开计算器
# 直接调用可执行文件
os.startfile('D:\\QQ\\Bin\\QQScLauncher.exe')
# 第11行代码为打开QQ,需要找到你的QQ安装位置才可以打开,注意转义字符需要 \\

5.6.2 os.path模块

🚩os.path模块操作目录相关函数

函数 说明
abspath(path) 用于获取文件或目录的绝对路径
exists(path) 用于判断文件或目录是否存在,如果存在返回 True,否则返回False
join(path, name) 将目录与目录或者文件名拼接起来
splitext() 分离文件名和扩展名
basename(path) 从一个目录中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdit(path) 用哦关于判断是否为路径

函数结果演示:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 10:53
# 欢迎大家关注AIoT相关博客~
import os.path
print(os.path.abspath('OsPath.py'))
print(os.path.exists('OsPath.py'),os.path.exists('666.py'))
print(os.path.join('E:\\pythonProject', 'OsPath.py'))
print(os.path.split('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))
print(os.path.splitext('OsPath.py.py'))
print(os.path.basename('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))
print(os.path.dirname('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))
print(os.path.isdir('E:\\pythonProject.py\\chap2\\Document\\OsPath.py'))

image.png

列出指定目录下的所有 py 文件:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 10:57
# 欢迎大家关注AIoT相关博客~
import  os
path=os.getcwd()
lst=os.listdir(path)
for filename in lst:
    if filename.endswith('.py'):
        print(filename)

walk() 方法:递归遍历所有的文件:可以把指定目录下的子目录文件也一一列举出来。

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/2 11:05
# 欢迎大家关注AIoT相关博客~
import os
path = os.getcwd()
lst_files = os.walk(path)
for dirpath, dirname, filename in lst_files:
    '''
    print(dirpath)
    print(dirname)
    print(filename)
    print('----------------------------------')
    '''
    for dir in dirname:
        print(os.path.join(dirpath, dir))
    for file in filename:
        print(os.path.join(dirpath, file))
    print('----------------------------------')


目录
相关文章
|
27天前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
52 4
|
1月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
67 2
|
27天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
6天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
28天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
16天前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
15 2
|
22天前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!
|
1月前
|
Python
Python编程-关于面向对象的一些
Python编程-关于面向对象的一些
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
4天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!