外观
文件读写
读取文件的步骤
内置函数 open() 可以打开文件,该方法返回一个 file 对象,你可以通过该对象来操作文件。下面是参数说明:
file:指定要打开的文件路径。如果文件不存在,会抛出异常。mode:指定打开文件的模式。常见模式包括r(只读)、w(只写)、w+(可读可写)、a(追加到文件末尾)。在模式后面加上b表示以二进制模式打开文件。buffering:指定缓冲模式。设置为0表示不缓存,1表示缓存,大于2的值表示定义缓冲区的大小。
例:
file1 = open('./message.txt', 'w', encoding='utf8') # 因为指定模式为可读可写 因此若文件不存在则会自动创建该文件
print(file1)
file2 = open('./message.txt', 'r', encoding='utf8')
print(file2)运行结果:
<_io.TextIOWrapper name='./message.txt' mode='w' encoding='utf8'>
<_io.TextIOWrapper name='./message.txt' mode='r' encoding='utf8'>file对象的write()方法向文件中写入内容(前提要将读取模式设为写),并返回成功写入的字符数。
例:
line = file1.write('向文件中写入内容')
print(line)
file1.flush() # 在写入内容时要清除缓冲区,或者及时关闭文件,才能保存操作运行结果:
8file对象的read()方法读取文件中的内容(前提是读取模式要设置成读取)。
例:
content = file2.read()
print(content)运行结果:
向文件中写入内容最后要关闭文件。
例:
file1.close()
file2.close()使用with关键字打开文件
可以使用 with 语句打开文件,在 with 代码块结束后文件会自动关闭。
readline()方法可以一次读取一行,也可以通过指定参数来限制读取的字符数。readlines()方法可以一次读取多行,同样可以通过指定参数来限制读取的字符数。
例:
with open('./content.txt', 'r', encoding='utf8') as file:
print(file.readline()) # readline()方法可以一次读取一行 也可指定参数指定读取的字符数
print(file.readlines()) # readlines()方法可以一次读取多行 还可以指定参数指定读取的字符数运行结果:
第一行
['第二行\n', '第三行']这里的读取结果之所以是这样是因为在使用readline()方法时文件的指针向后移动了一行,也就是说此时文件的指针在第二行。实际上每次使用读写操作时指针都会后移。
文件其他操作
- os模块的常用方法
os.name存储当前操作系统的名称。如果值为nt,则表示 Windows 操作系统。os.sep存储当前路径的路径分隔符。os.linesep存储当前系统的换行符。os.getcwd()获取当前文件工作的绝对路径。os.path.abspath(path)返回path的绝对路径。os.path.join()方法返回两个路径拼接后的结果。
例:
import os
from os import path
print('当前操作系统为: ', os.name)
print('当前系统使用的路径分隔符为: ', os.sep)
print('当前系统的换行符为: ', os.linesep.__repr__()) # __repr__()代表不转义
print('当前文件的工作目录是: ', os.getcwd()) #
print('message.txt文件所在的绝对路径为: ', path.abspath(r'message.txt'))
print('两个路径拼接后的结果为: ', path.join(r'C:\Windows', r'message.txt'))
print('相对路径下的text文件夹是否存在: ', path.exists(r'.\text'))运行结果:
当前操作系统为: nt
当前系统使用的路径分隔符为: \
当前系统的换行符为: '\r\n'
当前文件的工作目录是: A:\note\newsrc\base\file
message.txt文件所在的绝对路径为: A:\note\newsrc\base\file\message.txt
两个路径拼接后的结果为: C:\Windows\message.txt
相对路径下的text文件夹是否存在: False- os模块的高级操作——操作文件夹
os.mkdir()可以创建一个文件夹。os.makedirs()可以创建多级文件夹。rmdir()可以删除文件夹。
例:
import os
path = r'.\demo'
if not os.path.exists(path): # 若不存在该文件
os.mkdir(path)
else:
print('该文件夹已存在')
# 创建多级目录
path = r'.\demo\text'
if not os.path.exists(path): # 若此文件不存在
os.makedirs(path) # 创建此文件夹
else:
print('该文件夹已存在')
# 删除目录
path = r'.\mr\demo'
if os.path.exists(path): # 若此文件存在
os.rmdir(path) # 删除此文件
else:
print('该文件夹不存在, 删除失败')运行结果:
该文件夹已存在
该文件夹已存在
该文件夹不存在, 删除失败- 遍历目录——
walk()方法
os.walk() 函数是 Python 中用于遍历目录树的一个非常方便的工具。它返回一个生成器,可以递归地遍历指定目录及其子目录中的所有文件和文件夹。
top:必选参数,表示要遍历的根目录。topdown:可选参数,默认为 True,表示从上而下遍历。如果设置为 False,则表示从下而上遍历。onerror:可选参数,表示错误解决方式。如果指定了该参数,则遇到错误时将执行指定的错误解决方法。followlinks:可选参数,默认为 False,表示是否以链接方式输出。如果设置为 True,则会跟踪符号链接所指向的目录或文件。
os.walk() 返回一个生成器,每次迭代会生成一个元组 (root, dirs, files),其中:
root:字符串,表示当前遍历的目录路径。dirs:列表,表示当前目录下的所有文件夹名字。files:列表,表示当前目录下的所有文件名字。
通过遍历这个生成器,可以逐个访问目录树中的每个目录、子目录和文件。
例:
import os
# 遍历此目录下的所有文件和文件夹
path = os.walk('.', True)
for i in path:
print(i)
print('-'*10)
path = r'..\file'
for root, dirs, files in os.walk(path):
print('[', root, ']', '下的文件包含:')
for name in dirs:
print(name)
for name in files:
print(name)运行结果:
('.', ['demo', 'first', 'other'], [])
('.\\demo', ['text'], [])
('.\\demo\\text', [], [])
('.\\first', [], ['content.txt', 'demo.ipynb', 'message.txt'])
('.\\other', [], ['operation.ipynb'])
----------
[ ..\file ] 下的文件包含:
demo
first
other
[ ..\file\demo ] 下的文件包含:
text
[ ..\file\demo\text ] 下的文件包含:
[ ..\file\first ] 下的文件包含:
content.txt
demo.ipynb
message.txt
[ ..\file\other ] 下的文件包含:
operation.ipynb- 其他操作
remove()用于删除文件。rename()可以重命名文件,第一个参数为旧文件名,第二个参数为新文件名。os.stat()可以获取文件信息,该方法返回一个对象,访问对象的变量就可以获取信息。
例:
import os
if os.path.exists(r'.\new.txt'):
os.remove(r'.\new.txt')
else:
print('该文件不存在')
if os.path.exists(r'A:\\file'):
os.rename(r'A:\file.txt', r'A:\file')
else:
print('该文件不存在')
path = None
if os.path.exists(r'..\Error.ipynb'):
path = os.stat(r'..\Error.ipynb')
else:
print('该文件不存在')
print('Error.ipynb文件的大小是: ', path.st_size)
print('Error.ipynb最后的访问时间是: ', path.st_atime)运行结果:
该文件不存在
该文件不存在
Error.ipynb文件的大小是: 4848
Error.ipynb最后的访问时间是: 1665747794.7438216