AI闪电战:代码+实战 从Python速通到深度学习|文件操作基础

想要查看本系列的其他文章请到作者主页中。 学习提示:在有别的编程基础之上,学习Python很简单,只是语法不同,所以有很多新的语法记不住也没关系,不用专门耗时间死记,实战的时候现用现查就行。
下面的介绍中是每个部分最常用的语法,基本能够应付绝大多数的情况,如果希望学习更详细的内容,可以参考每个部分给出的资料链接。

AI闪电战:代码+实战 从Python速通到深度学习|文件操作基础


1. 打开和关闭文件

作用

在编程过程中,读取和写入文件是处理数据的常见操作。通过打开文件,我们可以读取文件中的内容或将数据写入文件。关闭文件则确保资源释放,避免出现内存泄漏或数据丢失等问题。

常用语法

1.1 open() 函数的语法
file = open(file_name, mode)
  • file_name: 文件路径(可以是相对路径或绝对路径)。
  • mode: 文件的打开模式,决定了我们是以读、写、追加等方式操作文件。
# 示例:打开一个文本文件进行读取
file = open("example.txt", "r")
1.2 模式参数详解
模式作用说明
'r'只读默认模式,如果文件不存在会报错
'w'写入如果文件存在会清空内容,不存在则创建
'a'追加在文件末尾追加内容,不清空原内容
'b'二进制模式用于处理非文本文件(如图片)
't'文本模式默认模式,处理文本文件
'+'读写模式可同时进行读和写操作

组合模式:

  • 'rb':以二进制只读模式打开文件。
  • 'wb':以二进制写入模式打开文件,清空内容。
  • 'a+':以追加和读写模式打开文件。
# 示例:以二进制写入模式打开文件
file = open("example.bin", "wb")
1.3 使用 with 语句自动管理文件关闭

在传统的文件操作中,打开文件后需要手动关闭它,以确保资源正确释放。然而,Python 提供了 with 语句,它能自动管理文件的打开和关闭,即使在操作中发生异常也能自动关闭文件。

# 使用 with 语句自动管理文件的打开和关闭
with open("example.txt", "r") as file:
    content = file.read()
    print(content)
# 文件已在 with 块结束后自动关闭
  • 好处:不需要手动调用 file.close(),减少了出错的机会,代码更简洁。

要点总结

  • open() 函数 用于打开文件,返回一个文件对象。
  • 模式参数 决定文件的操作方式,最常见的有 'r'(只读)、'w'(写入)和 'a'(追加)。
  • with 语句 可自动管理文件的关闭,避免手动 close() 的麻烦,特别适合处理资源释放问题。

练习与答案

练习 1:打开一个文本文件并读取其内容

编写一段代码,使用 open() 函数打开一个名为 sample.txt 的文件,读取其内容并打印到控制台上。

# 示例代码
with open("sample.txt", "r") as file:
    content = file.read()
    print(content)
练习 2:使用不同的模式打开文件

尝试以写入模式 'w' 打开一个文件,并写入一行新的文本。然后以读取模式 'r' 打开同一个文件,读取并打印其内容。

# 写入文件
with open("test.txt", "w") as file:
    file.write("Hello, world!")

# 读取文件
with open("test.txt", "r") as file:
    content = file.read()
    print(content)

更详细的知识点学习链接


好的,下面是文件操作基础:读取文件部分的详细内容,包括作用、常用语法、要点总结、练习与答案,以及更详细的学习链接:


2. 读取文件

文件读取是将存储在文件中的数据提取到程序中的过程。无论是配置文件、日志数据、还是用户输入,文件读取在数据处理过程中是非常常见的操作。

常用语法

2.1 逐行读取文件

逐行读取文件适用于处理大文件或逐行处理的场景,可以使用 readline()readlines() 方法。

  • readline():每次读取文件的一行内容,常用于逐行处理数据。
  • readlines():一次性读取文件所有行,并返回一个列表,每个列表元素是文件中的一行。
# 示例:逐行读取文件内容
with open("example.txt", "r") as file:
    # 使用 readline() 逐行读取
    line = file.readline()
    while line:
        print(line.strip())  # 打印每行内容并去除换行符
        line = file.readline()
# 示例:使用 readlines() 一次性读取所有行
with open("example.txt", "r") as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())  # 打印每行内容并去除换行符
2.2 一次性读取文件

read() 方法用于一次性读取整个文件内容,适合文件较小时使用。

# 示例:一次性读取文件内容
with open("example.txt", "r") as file:
    content = file.read()
    print(content)
  • 注意:如果文件非常大,read() 可能会占用大量内存,因此对于大文件来说,逐行读取更加合适。

要点总结

  • readline():每次读取一行,适合逐行处理文件。
  • readlines():一次性读取所有行,并返回一个列表,适合对文件进行批量处理。
  • read():一次性读取整个文件,适合文件较小的情况。
  • with 语句:可以自动管理文件打开和关闭,避免忘记关闭文件的错误。

练习与答案

练习 1:逐行读取文件并打印

编写代码,逐行读取 sample.txt 文件,并打印每行内容。

# 示例代码
with open("sample.txt", "r") as file:
    line = file.readline()
    while line:
        print(line.strip())  # 打印并去掉换行符
        line = file.readline()
练习 2:一次性读取整个文件并打印

编写代码,一次性读取 sample.txt 文件的所有内容并打印。

# 示例代码
with open("sample.txt", "r") as file:
    content = file.read()
    print(content)
练习 3:读取文件的所有行并统计行数

使用 readlines() 方法读取文件的所有行,并统计该文件有多少行。

# 示例代码
with open("sample.txt", "r") as file:
    lines = file.readlines()
    print(f"文件共有 {len(lines)} 行")

更详细的知识点学习链接


好的,下面是 文件操作基础:写入文件 部分的详细内容,包括作用、常用语法、要点总结、练习与答案,以及更详细的学习链接:


3. 写入文件

作用

写入文件是将程序中的数据保存到文件中,以便于长期存储或后续处理。无论是生成报告、记录日志还是保存用户输入,文件写入都是常用的操作。

常用语法

3.1 逐行写入文件

逐行写入文件适用于分步骤或动态生成内容的场景,常用 write() 方法进行写入。

  • write():将字符串写入文件。
# 示例:逐行写入文件
with open("example.txt", "w") as file:
    file.write("Hello, World!\n")
    file.write("This is Python file writing example.\n")
  • write() 方法不会自动添加换行符,因此需要手动加上 \n
3.2 一次性写入文件

writelines() 方法用于一次性写入多个字符串,适合批量写入内容。它接收一个字符串列表作为参数,将每个字符串写入文件。

# 示例:一次性写入多行
lines = ["Hello, World!\n", "This is Python.\n", "File writing example.\n"]
with open("example.txt", "w") as file:
    file.writelines(lines)
  • 注意,writelines() 不会自动添加换行符,需要确保每个字符串末尾包含 \n

要点总结

  • write():将字符串逐行写入文件,适合处理单独的字符串,注意需要手动添加换行符。
  • writelines():一次性写入字符串列表,适合批量处理,需要确保每个字符串末尾有换行符。
  • 模式
    • 'w' 模式:写入文件,若文件已存在则清空内容。
    • 'a' 模式:追加写入,适合保留已有内容的基础上进行追加。
  • with 语句:确保文件写入后自动关闭,避免资源泄露。

练习与答案

练习 1:写入一个文件并保存

编写代码,使用 write() 方法将一段文本写入 output.txt 文件。

# 示例代码
with open("output.txt", "w") as file:
    file.write("这是一个测试文件。\n")
    file.write("欢迎学习Python文件操作!\n")
练习 2:一次性写入多行文本

编写代码,使用 writelines() 方法一次性写入多行文本到 output.txt 文件。

# 示例代码
lines = ["这是第一行。\n", "这是第二行。\n", "这是第三行。\n"]
with open("output.txt", "w") as file:
    file.writelines(lines)
练习 3:追加写入文件内容

编写代码,使用 'a' 模式打开文件,并追加一行新的文本。

# 示例代码
with open("output.txt", "a") as file:
    file.write("这是追加的一行内容。\n")

更详细的知识点学习链接


好的,下面是 文件操作基础:文件指针操作 部分的详细内容,包括作用、常用语法、要点总结、练习与答案,以及更详细的学习链接。


4. 文件指针操作

作用

在文件操作中,文件指针用于指示当前文件读取或写入的位置。通过控制文件指针的位置,我们可以灵活地在文件的不同部分进行读写操作。Python 提供了 seek()tell() 两个方法来操作和查询文件指针的位置。

常用语法

4.1 tell() 方法

tell() 方法用于获取当前文件指针在文件中的位置。文件指针的位置是从文件开头开始计算的字节数。

# 示例:使用 tell() 获取文件指针位置
with open("example.txt", "r") as file:
    print(file.tell())  # 输出当前指针位置(开始时为 0)
    content = file.read(10)  # 读取 10 个字符
    print(file.tell())  # 输出指针位置(应为 10)
4.2 seek() 方法

seek() 方法用于移动文件指针到指定的位置。它有两个参数:

  • offset: 偏移量,表示从某个位置开始移动的字节数。
  • whence: 可选,表示从哪里开始移动文件指针。取值为:
    • 0:文件开头(默认)
    • 1:当前位置
    • 2:文件末尾
# 示例:使用 seek() 移动文件指针
with open("example.txt", "r") as file:
    file.seek(5)  # 将指针移动到第 5 个字节
    content = file.read(5)  # 从第 5 个字节开始读取 5 个字节
    print(content)

seek() 可以配合 tell() 一起使用,精准地控制文件操作的范围和位置。

seek() 进阶:读取文件末尾部分

使用 seek() 可以轻松定位到文件的末尾,然后从后往前读取文件内容。通过将 whence 参数设置为 2,可以直接从文件末尾开始偏移。

# 示例:读取文件末尾的内容
with open("example.txt", "rb") as file:  # 使用二进制模式读取
    file.seek(-10, 2)  # 移动到文件末尾倒数第 10 个字节
    content = file.read()
    print(content)

要点总结

  • tell():返回文件指针当前位置,单位为字节。
  • seek():用于移动文件指针,精确定位读取或写入的位置。参数 whence 控制从哪里开始偏移,默认从文件开头。
  • 文件指针操作 适用于处理需要随机访问的文件,比如日志分析、大型文件的部分读取等。

练习与答案

练习 1:获取文件指针位置

编写代码,打开一个文件,读取一些字符后,使用 tell() 获取当前文件指针位置。

# 示例代码
with open("sample.txt", "r") as file:
    content = file.read(10)  # 读取前 10 个字符
    print(f"指针位置:{file.tell()}")  # 输出指针位置
练习 2:移动文件指针并读取内容

编写代码,使用 seek() 将文件指针移动到文件的某个位置,然后读取文件内容。

# 示例代码
with open("sample.txt", "r") as file:
    file.seek(5)  # 将指针移动到第 5 个字节
    content = file.read(10)  # 从第 5 个字节开始读取 10 个字符
    print(content)
练习 3:读取文件末尾的内容

编写代码,使用 seek() 将文件指针移动到文件末尾的倒数第 10 个字节,然后读取文件的最后 10 个字节内容。

# 示例代码
with open("sample.txt", "rb") as file:
    file.seek(-10, 2)  # 将指针移动到文件末尾的倒数第 10 个字节
    content = file.read()  # 读取最后 10 个字节
    print(content)

为了帮助更好地理解文件指针操作,我们先假设有一个名为 example.txt 的文件,文件内容如下:

example.txt 文件内容:

Python is fun!
Let's learn file operations.
File pointers can be tricky.

详细讲解文件指针操作

1. tell() 方法获取文件指针位置

tell() 方法返回文件指针的当前位置(以字节为单位)。当我们读取文件时,文件指针会移动,tell() 可以帮助我们追踪指针的位置。

示例代码

with open("example.txt", "r") as file:
    print(file.tell())  # 输出文件指针初始位置,应该为 0
    content = file.read(7)  # 读取前 7 个字符 "Python "
    print(content)
    print(file.tell())  # 输出文件指针当前位置,应该为 7

输出

0
Python 
7

解释:

  • 在读取文件时,最开始文件指针位于文件开头(位置 0)。
  • 读取了前 7 个字符后,文件指针移动到第 7 个字节。

2. seek() 方法移动文件指针

seek() 用于将文件指针移动到指定位置。可以从文件开头、当前位置或文件末尾进行移动。

示例1:将指针移动到文件的第 8 个字节
with open("example.txt", "r") as file:
    file.seek(8)  # 将文件指针移动到第 8 个字节
    content = file.read(4)  # 读取接下来的 4 个字符
    print(content)

输出

is f

解释:

  • seek(8) 将文件指针移动到文件第 8 个字节位置(“Python is fun!” 中的 “is f”)。
  • 之后读取 4 个字符,打印出 “is f”。
示例2:读取文件末尾的内容

使用 seek()whence 参数,可以移动文件指针到文件末尾,逆向读取内容。

with open("example.txt", "rb") as file:  # 以二进制模式打开文件
    file.seek(-10, 2)  # 将指针移动到距离文件末尾 10 个字节处
    content = file.read()  # 读取最后 10 个字节
    print(content.decode('utf-8'))  # 将二进制数据解码为字符串

输出

e tricky.

解释:

  • seek(-10, 2) 将文件指针从文件末尾倒退 10 个字节,并开始读取。
  • 输出文件末尾的最后一部分内容 “e tricky.”。

3. 综合示例:读取文件的某个部分并返回指针位置

假设我们想读取第二行的内容,并打印读取后文件指针的位置。

with open("example.txt", "r") as file:
    file.seek(15)  # 跳过第一行的 "Python is fun!\n" (15 个字节)
    second_line = file.readline()  # 读取第二行
    print(second_line)
    print("当前文件指针位置:", file.tell())  # 输出文件指针位置

输出

Let's learn file operations.

当前文件指针位置: 44

解释:

  • seek(15) 跳过了第一行 “Python is fun!”(包括换行符)。
  • readline() 读取了第二行,内容为 “Let’s learn file operations.”。
  • 读取后,文件指针位于字节位置 44(读取的内容长度)。

更详细的知识点学习链接


问题解答
由于本系列是基础教程,所以有任何问题基本上国内免费的AI模型都能回答,有任何疑问或Bug可以寻求以下免费的大模型的解答。

  • 豆包:https://www.doubao.com/chat/
  • 文心一言:https://yiyan.baidu.com/
  • 通义千问:https://tongyi.aliyun.com/qianwen/
  • 讯飞星火:https://xinghuo.xfyun.cn/desk

如果觉得有帮助的话,求 关注、收藏、点赞、星星 哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能技术小白修炼手册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值