一、文件操作
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的区别
readlines
和 readline
是 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