1、文件操作步骤
- 打开文件
- 读写操作
- 关闭文件
2、文件的打开操作
在python中文件的打开用 open函数进行打开,或者创建一个文件,语法如下
open(addr, mode) # addr表示文件的路径, mode表示模式
文件打开的模式
3、文件的读取操作
read(num)
# num表示从文件中读取的内容的长度(单位是字节),如果没有传num, 那么表示读取文件中的所有数据
readlines(num)
# 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素, num表示读取的行数
readline(num)
# 表示一次读取一行内容,num表示读取前面num个字节
例子
handle = open('./text.txt', 'r')
limit = 10
content = handle.read(limit)
while (content):
print(content)
content = handle.read(limit)
handle.close()
handle = open('./text.txt', 'r')
content = handle.readlines()
print(content) # ['this is text\n', 'this is first\n', 'this is second']
handle.close()
seek函数的使用
文件对象.seek(偏移量,起始位置)
seek函数是用来移动文件指针起始位置的值有:0---文件开头,1---当前位置, 2---文件结尾
路径的相关操作
from os import path
from pathlib import Path
p = Path('c:/a/b/test.html')
print(p.parent) # 获取路径的dirname
print(p.name) # 获取路径的basename
print(path.splitext(p)[0]) # 去除后缀名的路径
print(p.suffix) # 获取路径的扩展名
print(p.joinpath('c://a/b', 'test.html')) #进行路径的拼接
print(path.sep) # 查看路径的分割符
利用以上相关知识点,实现一个简易版的文件拷贝功能
from os import path
from pathlib import Path
def copyFile(filePath):
handle = Path(filePath)
if(not handle.exists()): return
index = 1
newFileName = f"{path.splitext(handle.name)[0]}[副本{index}]{handle.suffix}"
while(path.exists(newFileName)):
index += 1
newFileName = f"{path.splitext(handle.name)[0]}[副本{index}]{handle.suffix}"
newFilePath = path.join(handle.cwd(), newFileName)
copyTarget = open(filePath, 'rb')
target = open(newFilePath, 'wb')
content = copyTarget.read(10)
while(content):
target.write(content)
content = copyTarget.read(10)
copyTarget.close()
target.close()
copyFile('./text.txt')
4、文件夹的操作
# 对文件或者文件夹进行重命名,也可以起到剪切的作用
os.rename(origin, target)
import os
from os import path
cwd = os.getcwd() # 获取当前的目录
list = os.listdir(cwd) # 获取当前文件夹的所有文件
for item in list:
if item.startswith('text['):
temp = path.join(cwd, item)
[name, ext] = path.splitext(item)
# rename表示重命名文件, 也可以进行剪切的功能
os.rename(temp, path.join(cwd, 'temp', f'{name}1{ext[0:-1]}'))
# 重命名文件夹
os.rename(path.join(cwd, 'temp'), path.join(cwd, 'text'))
os.remove(文件) 删除文件
os.listdir(dirpath) 获取文件夹内文件列表
os.getcwd() 获取当前的目录
import os
from os import path
targetFolderName = 'text'
cwd = os.getcwd()
list = os.listdir(path.join(cwd, targetFolderName))
# 把指定文件夹内的所有文件进行删除
for item in list:
os.remove(path.join(cwd, targetFolderName, item))
os.mkdir(dirpath) 创建文件夹
os.rmdir(dirpath) 删除文件夹
import os
from os import path
cwd = os.getcwd()
targetDir = path.join(cwd, 'temp')
if(not path.exists(targetDir)): os.mkdir(targetDir) # 如果不存在文件夹,则创建文件夹
print(path.exists(targetDir))
os.rmdir(targetDir) # 删除文件夹
os.chdir(dirpath) 改变默认目录
import os
from os import path
cwd = os.getcwd()
print(cwd) # D:\pythonCode\learn
os.chdir(path.join(cwd, 'text')) # 改变当前所在的文件夹指针
print(os.getcwd()) # D:\pythonCode\learn\text
4、处理json文件
import json
# with...as 是 Python 提供的一种新的 API 上下文管理协议,比传统的 try...finally 的写法更加简洁优雅,且没有 try 所存在的作用域泄露等问题。
# with...as 这个语句,有两个作用。
# 优雅的关闭文件、网络连接、数据库等资源,无需显式调用 f.close() 等方法:
with open('file.json', 'r') as f:
data = json.load(f)
# 这段代码在读取完文件之后,会自动关闭文件资源。如果不使用 with...as 结构,你就必须记得明确关闭文件:
f = open('file.json', 'r')
data = json.load(f)
f.close()
# 如果在使用文件或网络连接时忘了关闭,就会有文件锁无法放、网络连接耗尽等问题。
# 将变量 f (这里用于指向文件)绑定到一个代码块中: