python基础--- I/O

open(file, mode=‘r’, buffering=-1, encoding_=None, errors=None, newline=None, closefd=True, opener=None)

t: 文本文件(默认)
b: 二进制文件

r: 只读
w: 如果文件不存在,就创建文件,如果文件存在就删除之前的内容,重新写入
a: 如果文件不存在,就创建文件,如果文件存在,就将要写入的文件追加到文件末尾
x: 不存在的时候创建,存在就报错,有写的功能

r+: 在读的基础上添加写的功能,无法操作不存在的文件
w+: 在写的基础上添加读的功能,文件不存在就创建
a+: 在追加的基础上添加读的功能,文件不存在就创建

1.读文件
1. 手动关闭

file_obj = open(file_name, ‘r’, encoding=‘UTF-8’)
file_obj.read()
file_obj.close()

file_name = "test/test.txt"
# 打开文件(文件名, 打开方式, 字符编码),获取文件对象
file_obj = open(file_name, 'r', encoding='UTF-8')
print(type(file_obj)) #<class '_io.TextIOWrapper'>
# 读取文件-- 文件返回值为字符串(为文件全部内容)
content = file_obj.read()
print(content)

# 关闭文件
file_obj.close()
2. 自动关闭

with open(file_name, ‘r’, encoding=‘UTF-8’) as file_obj:
   content = file_obj.read()

# with open() as  with结束,自动关闭文件资源
# 默认以文本的形式读取,而且把文本的所有内容全部读出,不管有多大

file_name = "test/test.txt"
file_content = ""
try:
    with open(file_name, 'r', encoding='UTF-8') as file_obj:
        # 默认以文本的形式读取,而且把文本的所有内容全部读出,不管有多大
        # content = file_obj.read() # 参数默认是-1
        # print(content)
        chunk = 100 # 每次读取块的大小
        while True:
            content = file_obj.read(chunk) # 读取不到时返回空串
            if not content:  # 空串转换为bool 类型是 False
                break
            #print(content,end="")
            file_content += content
    print(file_content)

except FileNotFoundError as e:
    print(e)

3. readline

line = file_obj.readline()


file_name = "test/test.txt"
file_content = ""

with open(file_name,'r', encoding='utf-8') as file_obj:

    while True:
        line = file_obj.readline() # 每次读取一行
        if not line: #空串转化为 布尔值是 False
            break
        file_content += line

print(file_content, end="")
4. readlines

lines = file_obj.readlines()

  • 所有的内容都将被读取,并封装进列表,列表中每一个元素都是一行数据
file_name = "test/test.txt"
file_content = ""

with open(file_name,'r', encoding='utf-8') as file_obj:
    # 将所有的内容读取,并封装进列表,列表中每一个元素都是一行数据
    lines = file_obj.readlines()
    file_content = file_content.join(lines) # 将列表中元素拼接
print(file_content, end="")
5. for

for line in file_obj: 获取每一行数据

file_name = "test/test.txt"
file_content = ""
with open(file_name,'r', encoding='utf-8') as file_obj:

    for line in file_obj: # 获取每一行数据
        file_content += line

print(file_content, end="")
2. 写
1. 写文件

with open(file_name, ‘w+’, encoding=‘utf-8’) as file_obj:
   r = file_obj.write(line): 返回值是写入的字符数/字节数


file_name = "test/test03.txt"
"""
  r: 只读
  w: 如果文件不存在,就创建文件,如果文件存在就删除之前的内容,重新写入
  a: 如果文件不存在,就创建文件,如果文件存在,就将要写入的文件追加到文件末尾
  x: 不存在的时候创建,存在报错,有写的功能
  
  r+: 在读的基础上添加写的功能,无法操作不存在的文件
  w+: 在写的基础上添加读的功能,文件不存在就创建
  a+: 在追加的基础上添加读的功能,文件不存在就创建
"""
with open(file_name, 'w+', encoding='utf-8') as file_obj:
    line = "你好,张三"
    # write() 返回值是 写入的字符个数
    r = file_obj.write(line)
    print(r)
    file_obj.write(",hahah")

2. 文件复制

1. t: 读取文本文件, size是以字符为单位
2. b: 读取二进制文件,size 是以字节为单位

"""
  两种读取模式:
     1. t: 读取文本文件, size是以字符为单位
     2. b: 读取二进制文件,size 是以字节为单位

"""

file_name = "test/处处吻.flac"

# 复制文件
with open(file_name, 'rb') as file_obj:
    file_new_name = "test/处处吻_02.flac"
    with open(file_new_name, 'wb') as new_obj:
        # 定义每次读取的大小
        chunk = 1024 * 100  # 1K * 100
        while True:
            content = file_obj.read(chunk)
            if not content:
                break
            new_obj.write(content)

3. 文件定位
"""
  中文: 3 个字节
  英文: 1个字节
  
  tell(): 返回文件指针当前所在的位置(从开头计算)
  seek(n): 从开头开始,将指针移到n处
  seek(n, 0): 从开头开始,将指向后针移n个字节
  seek(n, 1): 从当前开始,将指向后针移n个字节
  seek(n, 2): 从结尾开始,将指向后针移n个字节
"""

with open("test/eng", 'rb') as file_obj:
    file_obj.read(100)
    print(file_obj.tell()) # 100

    file_obj.seek(101)
    print(file_obj.tell())  # 101

    file_obj.seek(101, 0)
    print(file_obj.tell())  # 101

    file_obj.seek(101, 1)
    print(file_obj.tell())  # 201

    file_obj.seek(-101, 2)
    print(file_obj.tell())  # 从文件末尾开始,指针移动 -101
4. 文件其他操作

import os
os.listdir(“目录路径”): 获取指定路径下的所有目录名,存入列表中
os.getcwd():获取当前工作路径
os.chdir(“路径”):切换当前工作路径
os.mkdir(“路径”):创建目录
os.rmdir(“路径”):删除目录
os.remove(“路径”):删除文件
rename(“旧名”, “新名”): 为文件重命名,也可移动文件,可linux 的 mv指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值