Python学习第八天

查看函数参数

操作之前给大家讲一个小技巧:如何查看函数的参数(因为python的底层源码是C语言并且不是开放的,也一直困扰着刚学习的我,这个参数叫什么名之类的看doc又总是需要翻译挺麻烦的)。

比如我们下面要说到的open函数

dir函数查看

dir() 函数可以列出对象的所有属性和方法。(了解就行不用深入)

python 复制代码
# 使用 dir 查询函数有哪些属性和方法
print(dir(open))
'''
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', 
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', 
'__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
'''
# 紧接着使用 open上面查询出来的方法即可
print(open.__name__)

# 和直接单机open函数过去的doc没啥区别 不会出来详细的参数
print(open.__doc__)

help函数查看

help() 函数可以显示函数的详细文档,包括参数说明和用法(这个比较好用会常用)。

python 复制代码
# 使用 help函数会出来详细的文档 最起码知道这个参数的名称 以及那些参数
help(open)
'''
    截取部分
    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
'''

inspect函数查看

inspect 模块可以用于获取函数的签名信息,包括参数列表和默认值(这个更好用也常用)。

python 复制代码
# 获取 open 函数的签名
import inspect
signature = inspect.signature(open)
print(signature)
'''
    只输出
    (file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
'''

具体支持参数查询:比如你会好奇encoding的参数有哪些?除了utf-8其他的支持什么?点击链接去查询python官网doc部分这个是encoding编码

文件

文件操作是Python编程中的基础技能之一。通过掌握这些基本操作,你可以轻松地读取、写入和处理文件,文件是以计算机硬盘为载体存储在计算机上的信息集合。

操作函数

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明

  • file:文件路径
  • mode:模式
  • buffering:设置缓冲区大小
  • encoding:编码

常见模式

模式字符 描述 文件存在时 文件不存在时
'r' 只读模式(默认模式)。 打开文件并从头读取。 抛出 FileNotFoundError
'w' 写入模式 清空文件内容并从头写入。 创建新文件。
'x' 独占创建模式 抛出 FileExistsError 创建新文件。
'a' 追加模式 在文件末尾追加内容。 创建新文件。
'b' 二进制模式 (与其他模式组合使用,如 'rb''wb')。 以二进制格式操作文件。 以二进制格式操作文件。
't' 文本模式 (默认模式,与其他模式组合使用,如 'rt''wt')。 以文本格式操作文件。 以文本格式操作文件。
'+' 读写模式 (与其他模式组合使用,如 'r+''w+')。 打开文件并允许读写。 打开文件并允许读写。

组合模式

模式组合 描述 文件存在时 文件不存在时
'rb' 二进制只读模式 打开文件并读取二进制数据。 抛出 FileNotFoundError
'wb' 二进制写入模式 清空文件并写入二进制数据。 创建新文件。
'ab' 二进制追加模式 在文件末尾追加二进制数据。 创建新文件。
'r+' 读写模式(文件必须存在)。 打开文件并允许读写。 抛出 FileNotFoundError
'w+' 读写模式(清空文件内容)。 清空文件并允许读写。 创建新文件。
'a+' 读写追加模式 打开文件并允许读写,写入时追加到文件末尾。 创建新文件。
'rb+' 二进制读写模式(文件必须存在)。 打开文件并允许读写二进制数据。 抛出 FileNotFoundError
'wb+' 二进制读写模式(清空文件内容)。 清空文件并允许读写二进制数据。 创建新文件。
'ab+' 二进制读写追加模式 打开文件并允许读写二进制数据,写入时追加到文件末尾。 创建新文件。

读取文件

有三种方式读取文件:

  • read():读取整个文件内容。

  • readline():读取文件的一行。

  • readlines():读取所有行并返回一个列表。

注意第二个参数为r即read读取

python 复制代码
# 文件操作
# read():读取整个文件内容。放在于当前目录下一致即可如果是其他路劲需要指定(我的文件中有中文所以需要指定编码格式为utf_8)写成UTF-8 utf-8 U8, UTF, utf8, cp65001都支持 在我写的文档链接
with open('python_test.txt', 'r',encoding='cp65001') as file:
    content = file.read()
    print(content)
'''
    输出结果
    这是第一行含有中文的python测试txt
    这是第二行含有中文的python测试txt
    这是第三行含有中文的python测试txt
'''

# readline():读取文件的一行。
with open('python_test.txt', 'r',encoding='cp65001') as file:
    for line in file:
        print(line.strip()) # 默认有换行符.strip()去除换行符
'''
    输出结果
    这是第一行含有中文的python测试txt
    这是第二行含有中文的python测试txt
    这是第三行含有中文的python测试txt
'''
# readlines():读取所有行并返回一个列表。
with open('python_test.txt', 'r',encoding='cp65001') as file:
    lines = file.readlines() # ['这是第一行含有中文的python测试txt\n', '这是第二行含有中文的python测试txt\n', '这是第三行含有中文的python测试txt']
    for line in lines:
        print(line.strip())
'''
    输出结果
    这是第一行含有中文的python测试txt
    这是第二行含有中文的python测试txt
    这是第三行含有中文的python测试txt
'''

写入文件

注意写入以'w'模式打开文件会覆盖文件内容,如果文件不存在则会创建新文件

  • write():写入单行。

  • writelines():写入多行。

注意第二个参数为w即write写

python 复制代码
# write  写入单行
with open('python_test.txt', 'w',encoding='cp65001') as file:
    file.write("测试啊这是我写入的一行代码") #
    file.write("测试啊这是我写入的二行代码") # 会覆盖上面的代码

# writelines  写入多行
with open('python_test.txt', 'w',encoding='cp65001') as file:
    file.writelines(["测试啊这是我写入的一行代码\n","测试啊这是我写入的二行代码"])
'''
    输出结果
    测试啊这是我写入的一行代码
    测试啊这是我写入的二行代码
'''

追加内容

如果你想在文件末尾追加内容而不是覆盖文件,可以使用'a'模式打开文件。

python 复制代码
# 追加内容修改模式即可
with open('python_test.txt', 'a',encoding='U8') as file:
    file.writelines(["\n测试啊这是我写入的一行代码\n","测试啊这是我写入的二行代码"])
'''
    输出结果
    测试啊这是我写入的一行代码
    测试啊这是我写入的二行代码
'''

关闭文件

使用with语句可以自动关闭文件,但如果你不使用with语句,记得手动关闭文件。

python 复制代码
# 不使用with需要手动关闭流 类似于java中的流处理
iofile = open('python_test.txt', 'r',encoding='utf-8')
print(iofile.read())
iofile.close()

删除文件

python 复制代码
import os
# 删除文件
if os.path.exists('python_test.txt'):
    # 补充创建的话是mkdir 改名的话也很好理解rename
    os.remove('python_test.txt')
    print('删除文件')
else:
    print('文件不存在了')

处理二进制文件

对于二进制文件(如图片、视频等),你可以使用'rb''wb'模式来读取和写入。选对模式即可。

python 复制代码
# 读取二进制文件
with open('image.png', 'rb') as file:
    image_data = file.read()

# 写入二进制文件
with open('image2.png', 'wb') as file:
    file.write(image_data)

补充os模块函数应用

函数名 功能描述 参数说明 返回值或行为
os.getcwd() 获取当前工作目录的路径。 无参数。 返回当前工作目录的绝对路径(字符串)。
os.chdir(path) 改变当前工作目录到指定路径。 path:目标目录的路径(字符串)。 无返回值。如果路径不存在或不可访问,抛出 FileNotFoundErrorOSError
os.listdir(path) 返回指定目录下的所有文件和子目录的列表。 path:目标目录的路径(字符串)。默认为当前目录(.)。 返回一个包含文件和目录名称的列表(列表)。如果路径无效,抛出 OSError
os.mkdir(path) 创建单级目录。 path:要创建的目录路径(字符串)。 无返回值。如果目录已存在或路径无效,抛出 FileExistsErrorOSError
os.makedirs(path) 递归创建多级目录。 path:要创建的目录路径(字符串)。 无返回值。如果目录已存在或路径无效,抛出 FileExistsErrorOSError
os.rmdir(path) 删除单级空目录。 path:要删除的目录路径(字符串)。 无返回值。如果目录非空或路径无效,抛出 OSError
os.removedirs(path) 递归删除多级空目录。 path:要删除的目录路径(字符串)。 无返回值。如果目录非空或路径无效,抛出 OSError
os.remove(path) 删除指定文件。 path:要删除的文件路径(字符串)。 无返回值。如果文件不存在或路径无效,抛出 FileNotFoundErrorOSError
os.rename(src, dst) 将文件或目录从 src 重命名为 dst src:源文件或目录路径(字符串)。 dst:目标文件或目录路径(字符串)。 无返回值。如果路径无效或目标已存在,抛出 OSError
os.stat(path) 获取文件或目录的状态信息。 path:目标文件或目录路径(字符串)。 返回一个 os.stat_result 对象,包含文件大小、修改时间等信息。
os.system(command) 在子 shell 中执行系统命令。 command:要执行的命令(字符串)。 返回命令的退出状态码(整数)。通常 0 表示成功,非 0 表示失败。
相关推荐
jz_ddk2 小时前
[学习] C语言多维指针探讨(代码示例)
linux·c语言·开发语言·学习·算法
艾莉丝努力练剑6 小时前
深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
c语言·开发语言·汇编·学习
杏仁海棠花饼8 小时前
杏仁海棠花饼的学习日记第十四天CSS
前端·css·学习
Yurko139 小时前
【C语言】函数指针及其应用
c语言·开发语言·学习
明月清了个风9 小时前
数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP
笔记·学习·动态规划
萌新小码农‍9 小时前
Spring框架学习day3--Spring数据访问层管理(IOC)
java·学习·spring
hu556679812 小时前
Astra学习之-如何修改Header-logo和favicon图标
学习·astra
cui_win13 小时前
LangChain 和 LangChain-ChatChat 的区别
学习·ai·langchain
hnlucky13 小时前
k8s中kubeSphere的安装使用+阿里云私有镜像仓库配置完整步骤
linux·运维·学习·阿里云·容器·kubernetes·云计算
Timmer丿13 小时前
kafka学习笔记(三、消费者Consumer使用教程——使用实例及及核心流程源码讲解)
java·笔记·学习·kafka