打开文件
在Python中,可以使用open()
函数来打开文件,这个函数返回一个文件对象。
基本语法是:f = open(file, mode='r', encoding=None)
其中f
是文件句柄,为自定义的标识符,可以通过它来对文件进行读取、写入、关闭等操作。
常用参数解释:
-
file: 要打开的文件名或路径。
-
mode: 打开文件的模式,默认为**
'r'
**即只读模式。其他模式包括:'r'
:只读模式。'w'
:写入模式,会覆盖已存在的文件。'a'
:追加模式,写入到文件的末尾。'b'
:二进制模式,用于非文本文件。'+'
:更新模式,用于读取和写入。
-
encoding: 文本文件的编码格式,如
'utf-8'
。 -
常用的打开模式组合方法
读写模式(
r+
):- 允许对文件进行读取和写入操作。
- 写入时不会清空文件,可以在读取后的任何位置开始写入。
写读模式(
w+
):- 允许写入和读取。
- 如果文件已存在,会先清空文件(即截断为零长度),然后开始写入。
- 可以在写入后读取文件的内容,通常用于先重写一个文件然后再读取它。
追加读模式(
a+
):- 允许写入和读取。
- 写操作会追加到文件的末尾,不管文件指针当前位置在哪。
- 即使文件指针移动到文件中间,写入操作仍然会追加到文件末尾。
- 文件不存在时将创建新文件。
二进制组合模式(如
rb+
,wb+
,ab+
):- 结合了二进制模式与其他模式的特点,用于非文本文件的读写。
rb+
:二进制读写,不截断文件,文件必须存在。wb+
:二进制写读,截断文件,文件内容被清空后开始写入。ab+
:二进制追加读,写操作总是追加到文件末尾。
关闭文件
在Python中,使用close()
函数,通过文件句柄,即可关闭指定文件。
关闭文件:f.close()
# 关闭文件句柄f
指向的文件
文件上下文管理器
# 使用with自动管理文件打开和关闭
# as 可以重命名
# 等价为file = open('example.txt', 'r') ... file.close()
with open('example.txt', 'r') as file:
仅对
with
的简单使用做介绍,不做深入研究
读取文件
文件对象提供了几种方法来读取内容,包括read()
, readline()
和readlines()
。
# 使用函数read()读取整个文件
with open('example.txt', 'r', encoding="utf-8") as file:
print(file.read())
# 逐行读取文件
with open('example.txt', 'r', encoding="utf-8") as file:
for line in file:
print(line, end="")
# 使用函数readline()逐行读取文件
with open('test.py', 'r', encoding="utf-8") as file:
line = file.readline()
while line:
print(line, end="")
line = file.readline()
# 使用函数readlines()读取所有行到一个列表中
with open('example.txt', 'r', encoding="utf-8") as file:
lines = file.readlines()
print(lines)
写入文件
写入文件通常使用write()
方法,对于多个数据可以使用writelines()
。
# 写入字符串到文件
with open('output.txt', 'w') as file:
file.write('Python is awesome.\n')
# 写入多个数据到文件
lines = ['First line\n', 'Second line\n']
with open('output.txt', 'a') as file:
file.writelines(lines)
为了更好的理解上述的内容,我编写了一个批量重命名文件或文件夹的程序。
"""
Time:2024-05-26
Function:批量重命名指定文件夹下的文件或文件夹
Python:Python 3.9.16
"""
import os
def rename_files_in_directory(directory):
# 检查目录是否存在
if not os.path.exists(directory):
print(f"文件夹 {directory} 不存在.")
return
# 尝试列出并重命名文件
try:
for filename in os.listdir(directory):
print(f"文件:{filename} (c 跳过 q 退出 其他则为重命名)")
oper = input("重命名为:")
if oper == 'c' or oper == 'continue':
continue
elif oper == 'q' or oper == 'quit':
break
new_filename = filename.replace(filename, oper)
old_file_path = os.path.join(directory, filename)
new_file_path = os.path.join(directory, new_filename)
os.rename(old_file_path, new_file_path)
print(f"文件 {filename} 重命名为 {new_filename}", end="\\n\\n")
except PermissionError:
print(f"暂无权限访问该文件 {directory}.")
except OSError as e:
print(f"Error: {e}")
# 使用示例
if __name__ == '__main__':
rename_files_in_directory(r'F:\\018_Paper')