Python-文件操作

基本文件操作

文件打开模式:默认rt

  1. b:二进制模式;类似Java的字节流
  2. t:文本模式;类似Java的字符流
  3. r:只读,文件不存在则抛异常
  4. w:只写,文件不存在则创建
  5. a:只追加写,文件不存在则创建
  6. x:创建一个新文件以进行写入
  7. +:读取和写入(如:r+、w+、a+、x+)

with管理上下文:会自动关闭文件,释放资源

"""with语法格式:
with EXPRESSION as TARGET:
    SUITE
"""
# 打开多个文件时,用逗号分隔
with open('D:/file1.txt', 'r') as file1, open('D:/file2.txt', 'w') as file2:
    pass  # pass为空操作:执行该操作时,不会发生任何事情

基本操作:

# 基本操作
path = "D:\\file.txt"
path = r"D:\file.txt"
path = "D:/file.txt"
# 1. 打开文件,t模式指定encoding,b模式不指定encoding
file = open(path, mode='w+', encoding='utf-8')
# 2. 读写文件
file.write("12345\n678910中国")
# 3. 关闭文件,释放资源
file.close()
print(type(file))  # <class '_io.TextIOWrapper'>

# 读操作:
"""
file.read()  # 读取n个字符,负或省略则读取到EOF
file.readline()  # 读取一行字符,文件指针移动到下一行行首
file.readlines()  # 读取多行,存储到列表返回
"""
# 文本文件读取示例:
with open(r"D:\file.txt", mode='rt', encoding='utf-8') as file:
    for line in file:  # 一次读取一行
        print(line, end='')
    print()
# 二进制文件读取示例:
with open(r"D:\file.txt", mode='rb') as file:
    while True:
        buffer = file.read(1024)  # 一次读取1024字节
        if len(buffer) == 0:
            break
        print(buffer)

# 写操作:t模式写时不需要编码,b模式写时需要编码
with open(r"D:\file.txt", mode='wt', encoding='utf-8') as file:
    file.write('12\n34\n')  # t模式
    # file.write('1111\n222\n'.encode('utf-8'))  # b模式
    # writelines写一个列表
    file.writelines(['56\n', '78\n'])  # t模式
    # file.writelines([bytes('333\n', encoding='utf-8'), '444\n'.encode('utf-8')])  # b模式

    print(file.readable())  # 是否可读
    print(file.writable())  # 是否可写
    print(file.tell())  # 当前文件指针距离文件开头的位置
    file.flush()  # 将内存中的文件内容刷新到硬盘
    print(file.closed)  # 文件是否关闭
    print(file.encoding)  # 文件的编码;如果打开模式为b,则没有该属性
    print(file.name)  # 文件名

# seek修改文件指针位置
with open(r"D:\file.txt", mode='rt', encoding='utf-8') as file:
    offset = 1  # 相对于whence进行偏移的
    whence = 0  # 0-开头(offset应>=0,t/b模式);1-当前位置(offset可能<0,b模式);2末尾(offset通常<0,b模式)
    position = file.seek(offset, whence)  # 更改文件指针位置,返回新的位置
    print(file.tell(), position)  # 1 1
    print(file.read(), end='')

os模块的文件操作

import os

###############################
# 使用os操作文件与文件夹

os.mkdir('D:\\dir')  # 创建文件夹
os.makedirs('D:\\dir\\a\\b')  # 递归创建文件夹
os.rmdir('D:\\dir\\a\\b')  # 删除文件夹
os.removedirs("D:\\dir\\a")  # 递归删除文件夹
# os.chdir('D:\\')  # 切换当前目录
print(os.getcwd())  # 获取当前目录
print(os.listdir('.'))  # 获取某一目录下文件/文件夹的名称列表
# os.rename('./src.py', './rename.py')  # 重命名文件/文件夹
# os.remove(r'D:\\1.txt')  # 删除文件

###############################
# os中的常用值

print(os.curdir)  # 当前文件夹
print(os.pardir)  # 上一层文件夹
print(os.sep)  # 系统的路径间隔符

print(os.environ)  # 系统环境变量

# os.system("dir")  # 执行系统命令

###############################
# 使用os.path操作文件与文件夹

print(os.path.normpath(__file__ + "/../.."))  # 标准化路径,消除双斜线等
print(os.path.dirname(__file__))  # 去掉路径名的最后一部分
print(os.path.basename(__file__))  # 返回路径名的最后一部分
print(os.path.abspath(__file__))  # 返回规范化的绝对路径
print(os.path.isfile(__file__))  # 是否为文件
print(os.path.isdir(r'./tests'))  # 是否为文件夹
print(os.path.getsize(__file__))  # 获取文件大小
print(os.path.join('a', r'D:\test', 'b', "c"))  # 连接多个路径,如果有根目录,则舍去根目录前面的

###############################
# 使用pathlib.Path操作路径,需要Python3.5+

import pathlib

print(pathlib.Path(__file__).parent)  # 获取父路径
print(pathlib.Path(__file__) / 'a/b.txt')  # 拼接路径
print(pathlib.Path(__file__).resolve())  # 标准化路径

shutil模块的文件操作

import shutil

src = ""
dst = ""
shutil.copy(src, dst)  # 将src文件复制到dst
shutil.copytree(src, dst)  # 复制整个文件夹
shutil.move(src, dst)  # 移动文件/文件夹

fsrc = open(src, "r")
fdst = open(dst, "w")
shutil.copyfileobj(fsrc, fdst)  # 将fsrc的内容覆盖拷贝到fdst

path = ""
shutil.rmtree(path)  # 递归删除文件夹

base_name = "打包后的路径,不带后缀"
format = "打包格式,如:zip、tar、bztar、gztar等"
root_dir = "要打包的文件/目录"
shutil.make_archive(base_name, format, root_dir)  # 压缩文件夹,返回压缩后的绝对路径

filename = "要解压的压缩包"
extract_dir = "解压到的文件夹,默认当前目录"
shutil.unpack_archive(filename, extract_dir)  # 解压压缩包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值