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 表示失败。
相关推荐
一直走下去-明1 小时前
flask学习1-基础
python·学习·flask
~Yogi1 小时前
每日学习Java之一万个为什么?(Maven篇+RPC起步+CICD起步)(待完善)
java·学习·maven
同学小张2 小时前
Ollama有安全漏洞! 国家网络安全通报中心紧急通报
人工智能·gpt·学习·安全·web安全·aigc·agi
重生之成了二本看我逆天改命走向巅峰2 小时前
从0搭建Tomcat第二天:深入理解Servlet容器与反射机制
java·开发语言·笔记·学习·servlet·tomcat·idea
viperrrrrrrrrr72 小时前
大数据学习(53)-Hive与Impala
大数据·hive·学习·impala
solomonzw2 小时前
C++ 学习(八)(模板,可变参数模板,模板专业化(完整模板专业化,部分模板专业化),类型 Traits,SFINAE(替换失败不是错误),)
c语言·开发语言·c++·学习
地球空间-技术小鱼3 小时前
学习笔记-AMD CPU 命名
linux·服务器·人工智能·笔记·学习
剑走偏锋o.O3 小时前
Spring Boot 学习笔记
spring boot·笔记·学习
周周记笔记3 小时前
“RStudio UI“快速指南
学习·r语言
剑走偏锋o.O4 小时前
Jedis学习笔记
java·redis·笔记·学习·jedis