Python超详细基础文件操作(详解版)(上)

简介: Python超详细基础文件操作(详解版)

一、文件操作


1. 文件打开与关闭


1.1 打开文件


在Python中,你可以使用 open() 函数来打开文件。


以下是一个简单的例子:

# 打开文件(默认为只读模式)
file_path = 'example.txt'
with open(file_path, 'r') as file:
    # 执行文件操作,例如读取文件内容
    file_content = file.read()
    print(file_content)
# 文件在with块结束后会自动关闭,无需显式关闭文件

在上述示例中:

  • 'example.txt' 是文件的路径和名称,你可以根据实际情况修改为你想要打开的文件。
  • 'r' 表示只读模式。如果你想要写入文件,可以使用 'w' 模式,如果想要追加内容,可以使用 'a' 模式等。
  • with open(...) as file : 是使用上下文管理器的方式,确保文件在使用后被正确关闭,即使在处理文件时发生异常也能保证关闭。


1.2 关闭文件


在 Python 中关闭文件有两种主要的方法:


1.2.1 使用 with 语句


with 语句是一种上下文管理器,当它的代码块执行完毕时,会自动关闭文件。这是推荐的方式,因为它确保文件在使用完毕后被正确关闭,即使发生异常也能保证关闭。

1.2.2 使用 close() 方法:


你可以显式调用文件对象的 close() 方法来关闭文件。这种方法适用于一些特殊情况,但相对来说不如 with 语句简洁和安全。

在使用 with 语句时,不需要显式调用 close() 方法。如果你在代码中打开了文件而没有使用 with,请确保在适当的地方调用 close() 以关闭文件,以避免资源泄漏。


2. 访问模式及说明

访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果改文件不存在,创建新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
wb+ 以二进制格式打开一个文件用于读写。如果改文件已存在则会覆盖。如果改文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果改文件不存在,创建新文件用于读写。


二、文件读写


1. 写数据(write)


写入数据通常涉及将信息保存到文件、数据库或其他持久性存储介质中。以下是一些常见的数据写入场景的示例:


1.1 写入文本文件


使用内置的 open 函数来打开文件并写入内容。确保使用适当的模式(例如,'w' 表示写入)。

file_path = 'example.txt'
# 写入文件
with open(file_path, 'w') as file:
    file.write("Hello, this is some data.")

1.2 写入CSV文件


使用 csv 模块来写入CSV格式的文件。

import csv
csv_file_path = 'example.csv'
data = [['Name', 'Age', 'Occupation'],
        ['John Doe', 30, 'Engineer'],
        ['Jane Smith', 25, 'Designer']]
with open(csv_file_path, 'w', newline='') as csvfile:
    csv_writer = csv.writer(csvfile)
    csv_writer.writerows(data)

1.3 写入JSON文件


使用内置的 json 模块来写入JSON格式的文件。

import json
json_file_path = 'example.json'
data = {"name": "John Doe", "age": 30, "occupation": "Engineer"}
with open(json_file_path, 'w') as jsonfile:
    json.dump(data, jsonfile)

1.4 写入数据库


使用数据库连接库(如 sqlite3、mysql-connector-python 等)与相应的数据库进行交互。

import sqlite3
# 连接到SQLite数据库(假设有一个名为 example.db 的数据库)
conn = sqlite3.connect('example.db')
# 创建一个游标对象
cursor = conn.cursor()
# 执行SQL插入语句
cursor.execute("INSERT INTO users (name, age, occupation) VALUES (?, ?, ?)", ('John Doe', 30, 'Engineer'))
# 提交更改
conn.commit()
# 关闭连接
conn.close()

2. 读数据(read)


读取数据通常涉及从文件、数据库或其他存储介质中检索信息。以下是一些读取数据的常见示例:


2.1 读取文本文件


使用内置的 open 函数来打开文件并读取内容。

file_path = 'example.txt'
# 读取文件
with open(file_path, 'r') as file:
    data = file.read()
    print(data)

2.2 读取CSV文件


使用 csv 模块来读取CSV格式的文件。

import csv
csv_file_path = 'example.csv'
# 读取CSV文件
with open(csv_file_path, 'r') as csvfile:
    csv_reader = csv.reader(csvfile)
    for row in csv_reader:
        print(row)

2.3 读取JSON文件


使用内置的 json 模块来读取JSON格式的文件。

import json
json_file_path = 'example.json'
# 读取JSON文件
with open(json_file_path, 'r') as jsonfile:
    data = json.load(jsonfile)
    print(data)

2.4 从数据库中读取数据


使用数据库连接库(如 sqlite3、mysql-connector-python 等)与相应的数据库进行交互。

import sqlite3
# 连接到SQLite数据库(假设有一个名为 example.db 的数据库)
conn = sqlite3.connect('example.db')
# 创建一个游标对象
cursor = conn.cursor()
# 执行SQL查询语句
cursor.execute("SELECT * FROM users")
# 检索所有行
rows = cursor.fetchall()
# 打印每一行
for row in rows:
    print(row)
# 关闭连接
conn.close()

3. 读数据(readlines)


readlines 是 Python 中用于读取文件的方法之一,它用于逐行读取文件内容,并将每一行作为字符串存储在一个列表中。下面是对 readlines 方法的详细解释:


使用 readlines 方法的基本语法

with open('file.txt', 'r') as file:
    lines = file.readlines()

解释:

  • open('file.txt', 'r') : 打开文件 'file.txt' 以供读取。第一个参数是文件名,第二个参数是打开文件的模式。'r' 表示只读模式。
  • with ... as ... : 使用 with 语句可以确保在读取完成后自动关闭文件,不需要显式调用 file.close()
  • lines = file.readlines() : readlines 方法用于读取文件的所有行,并将每一行作为一个字符串存储在列表 lines 中。
  • 每个列表元素对应文件中的一行文本。你可以使用列表索引来访问特定行,例如 lines[0] 表示文件的第一行。


例子:假设 ‘file.txt’ 包含以下内容:

Hello, this is line 1.
This is line 2.
And this is line 3.

使用 readlines 后:

with open('file.txt', 'r') as file:
    lines = file.readlines()
# lines 现在是一个包含每一行文本的列表
print(lines)
# 输出:
# ['Hello, this is line 1.\n', 'This is line 2.\n', 'And this is line 3.\n']
# 访问特定行
print(lines[0].strip())  # 输出:Hello, this is line 1.

注意事项:

  • 每一行的末尾都包含换行符 \n,你可以使用 strip() 方法去除这些额外的空白字符。
  • readlines 方法适用于处理包含多行文本的文件,但对于大型文件,可能需要考虑逐行读取而不是将整个文件加载到内存中。这可以通过循环遍历文件对象来实现,而不是使用 readlines


4. 读数据(readline)


readline 是 Python 中用于读取文件的方法之一,它用于逐行读取文件内容,并返回文件中的一行作为字符串。以下是对 readline 方法的详细解释:


使用 readline 方法的基本语法

with open('file.txt', 'r') as file:
    line = file.readline()

解释:

  • open('file.txt', 'r') : 打开文件 'file.txt' 以供读取。第一个参数是文件名,第二个参数是打开文件的模式。'r' 表示只读模式。
  • with ... as ... : 使用 with 语句可以确保在读取完成后自动关闭文件,不需要显式调用 file.close()
  • line = file.readline() : readline 方法用于读取文件的一行,并将该行作为一个字符串存储在变量 line 中。


例子:假设 ‘file.txt’ 包含以下内容:

Hello, this is line 1.
This is line 2.
And this is line 3.

使用 readline 后:

with open('file.txt', 'r') as file:
    line1 = file.readline()
    line2 = file.readline()
    line3 = file.readline()
print(line1)  # 输出:Hello, this is line 1.
print(line2)  # 输出:This is line 2.
print(line3)  # 输出:And this is line 3.

注意事项:

  • 每个 readline 调用都会读取文件的下一行。
  • 返回的字符串包含行末尾的换行符 \n。如果不需要换行符,可以使用 strip() 方法去除它。
  • 当文件读取完毕后,readline 将返回空字符串 ‘’,因此可以在循环中使用 while line != '' 来逐行读取整个文件。


循环读取整个文件:

with open('file.txt', 'r') as file:
    line = file.readline()
    while line != '':
        print(line.strip())  # 去除换行符
        line = file.readline()

这个循环将逐行读取整个文件,直到文件末尾。


5. readlines 和 readline的区别


readlinesreadline 是 Python 中用于读取文件的两种不同方法,它们之间有一些重要的区别:


5.1 readlines 方法:


  • 返回类型:readlines 方法返回一个包含文件所有行的列表,其中每个元素都是文件中的一行文本字符串。
  • 使用情况: 适用于处理包含多行文本的文件,可以一次性将整个文件加载到内存中。这种方法适用于文件较小,可以完全装入内存的情况。


例子:

with open('file.txt', 'r') as file:
      lines = file.readlines()

5.2 readline 方法:


  • 返回类型: readline 方法每次调用只返回文件中的一行作为字符串。如果再次调用,将返回下一行。当文件读取完毕后,返回空字符串 ‘’。
  • 使用情况: 适用于逐行处理大型文件,可以有效地降低内存使用。因为它一次只读取一行,可以在循环中逐行处理文件,而不必将整个文件加载到内存中。


例子:

with open('file.txt', 'r') as file:
      line = file.readline()
      while line != '':
          print(line.strip())  # 去除换行符
          line = file.readline()

5.3 区别总结:


  • readlines 一次性读取整个文件的所有行,并返回一个包含所有行的列表。
  • readline 逐行读取文件,每次调用返回文件中的一行,适用于处理大型文件,减少内存占用。
  • readlines 返回包含换行符的每一行,而 readline 返回单独的行,需要手动去除换行符。


选择使用哪个方法取决于文件的大小和处理需求。如果文件较小,可以完全装入内存,使用 readlines;如果文件较大,可以逐行处理,使用 readline


Python超详细基础文件操作(详解版)(下):https://developer.aliyun.com/article/1462917?spm=a2c6h.13148508.setting.20.7b614f0eGbArf0

相关文章
|
14天前
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
Python文件操作(1)
|
4月前
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
56 2
|
13天前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
5月前
|
开发者 Python
Python基础第七篇(Python的文件操作)
Python基础第七篇(Python的文件操作)
|
2月前
|
存储 Python
Python文件操作
Python文件操作
|
2月前
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
32 1
|
5月前
|
存储 安全 开发者
文件操作?Python让你轻松搞定!
【6月更文挑战第12天】Python编程中的文件操作至关重要,涉及数据存储和系统交互。通过内置的`open()`函数,开发者可轻松处理文件。以只读模式`'r'`为例,使用`with`语句打开并读取文件内容;写入文件则用`'w'`或`'a'`模式。文件对象还支持高级功能,如文件指针移动,允许随机访问。掌握这些技能能提升开发效率。
33 0
|
2月前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
45 6
|
1月前
|
Java 程序员 Python
【Python】文件操作
【Python】文件操作
19 0
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
28 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作