Python文件操作

本文介绍了Python中如何进行文件操作,包括使用open()函数打开和关闭文件,详细讲解了各种访问模式如w(写入)、r(只读)、a(追加)等。还涵盖了文件的读写、定位、备份以及字节文件的处理。同时,文章还演示了如何处理中文编码问题以及使用os模块进行文件管理,如重命名、删除和创建文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 文件操作介绍

  • 文件打开与关闭

python中打开文件,可以使用open()函数,可以打开一个已经存在的文件,或者创建一个新的文件。
open(文件名,访问模式,encoding = “utf-8”)
file=open("test.txt","w",encoding=”utf-8”)
file.write("哈哈哈")
file.close()
  • 文件访问模式

# w,只写入.如果文件不存在就创建,如果存在就覆盖
# 文件操作:I\O Input:输入--->读取内容 Output:输出--->写出内容
# 创建文件,指定文件名称,指定mode(模式)为M,如果文件不存在就创建,如果存在就覆盖
stream = open(file='b.txt', mode='w', encoding='UTF-8')
# 网文本中写入内容
stream.write('鹅鹅鹅...')
# 将文件流关闭
stream.close()
# 中文显示,pycharm默认打开的方式UTF-8 乱码,GBK打开的时候可以显示

# r,只读,如果文件不存在就报错
open(file='xxx.txt', mode='r', encoding='UTF-8')  # [Errno 2] No such file or directory: 'xxx.txt'
  • 文件读写

  • 文件的读写模式

# 文件的访问模式
# 文件形式:
#   文本文件---字符读写
#   字节文件---字节读写(图片,mp3)
# =====================================================================================================

# w,只写入.如果文件不存在就创建,如果存在就覆盖
# 文件操作:I\O Input:输入--->读取内容 Output:输出--->写出内容
# 创建文件,指定文件名称,指定mode(模式)为M,如果文件不存在就创建,如果存在就覆盖
stream = open(file='b.txt', mode='w', encoding='UTF-8')
# 网文本中写入内容
stream.write('鹅鹅鹅...')
# 将文件流关闭
stream.close()
# 中文显示,pycharm默认打开的方式UTF-8 乱码,GBK打开的时候可以显示
# ----------------------------------------------------------------------------------------------------
# r,只读,如果文件不存在就报错
# open(file='xxx.txt', mode='r', encoding='UTF-8')  # [Errno 2] No such file or directory: 'xxx.txt'
# ----------------------------------------------------------------------------------------------------
# a追加,如果文件不存在就创建文件,如果存在,追加内容
s = open(file='c.txt', mode='a', encoding='UTF-8')
s.write('哈哈哈')
s.close()

# =====================================================================================================

# r+,读写,如果文件不存在就报错
r = open(file='c.txt', mode='r+', encoding='UTF-8')
r.write('aaaaaa')
print(r.read())
r.close()
# ----------------------------------------------------------------------------------------------------
# w+,读写,如果文件不存在就创建,如果存在就覆盖
# a+,读和追加,如果文件不存在就创建文件,如果存在就追加内容

# =====================================================================================================

# 以下针对的文件是:字节形式文件,以二进制形式进行读写(byte=8bit)
# 任何模式的文件都支持

# rb,只读,如果文件不存在就报错
# wb,只写,如果文件不存在就创建文件,如果存在就覆盖
# ab,追加,如果文件不存在就创建文件,如果存在就覆盖
# rb+,读写,如果文件不存在就报错
# wb+,读写,如果文件不存在就创建,如果存在就覆盖
# ab+,读和追加,如果文件不存在就创建文件,如果存在就追加内容

  • 用for循环写入内容\按照行读取内容

# for循环写入100条数据到文件中
s = open(file='for循环写入内容.txt', mode='w', encoding='UTF-8')  # 创建一个名为'for循环写入内容的txt文件,模式为写入,编码方式为UTF-8'
for i in range(1, 101):  # 循环100次
    s.write(f'第{i}条数据\n')  # 写入循环次数
s.close()  # 关闭文件
# ---------------------------------------------------------------------------
# 读取文件内容
# read:读取所有内容
s = open(file='for循环写入内容.txt', mode='r', encoding='UTF-8')
# -----------------------------------------------
# str = s.read()  # 读取s中的内容,命名为str
# print(str)
# -----------------------
# print(s.read(4))  # 括号中的数字表示输出多条内容
# -----------------------
# print(s.readline())  # 读取一行数据
# print(s.readline())  # 读取第二行数据
# -----------------------
# print(s.readline(2))  # 获取某一行的字符个数
# -----------------------
# for line in s.readlines():  # 遍历所有行的数据
#     print(line,end='')  # 输出数据,将换行符换为空
# -----------------------
lines = s.readlines()  # 读出所有的行---读一次就是所有内容,后续只需要从读取中的字符串lines中提取数据就可以.如果继续读就没有内容了
print(lines[98])  # 打印索引为98的行的数据
print(lines[0])  # 打印索引为0的行的数据
# -----------------------------------------------
s.close()  # 关闭文件
  • 文件备份

# 备份文本文件
# s 源文件
s = open('a.txt', 'r+', encoding='UTF-8')
# s1 目标文件
s1 = open('my.txt', 'w', encoding='UTF-8')
# 备份操作
for line in s.readlines():
    s1.write(line)
# 释放文件资源
s.close()
s1.close()
# =======================================================================================
# 图片文件
s2 = open(file='C:\\Users\\76516\Pictures\\Saved Pictures\\扇巴掌.gif', mode='rb')
s3 = open(file='img\\xxx.gif', mode='wb')
# 读取所有内容
stream = s2.read()
#  写入内容
s3.write(stream)
# 释放文件资源
s2.close()
s3.close()
  • 文件定位读写

s = open('a.txt', 'r', encoding='UTF-8')
print(s.read(2))  # 鹅鹅
# 获取当前读的位置
print(s.tell())  # 6
print(s.read(2))  # 鹅.
print(s.tell())  # 10
# 跳跃到指定位置
s.seek(3)  # 跳跃到第三个字符
print(s.tell())  # 3
print(s.read(3))
  • 录入数据存储到文件

s = open('user.txt', 'w', encoding='UTF-8')
# 录入数据
for i in range(1, 4):
    print(f'请输入第{i}个学生信息')
    name = input('请输入姓名:\n')
    age = input('请输入年龄:\n')
    gender = input('请输入性别:\n')
    str = name + ';' + age + ';' + gender
    s.write(str + '\n')
# 关闭文件流
s.close()

# 结果:
# 创建一个user.txt文件,写入了
# 张三;18;男
# 李四;19;男
# 王五;17;女
  • 文件常用操作

import os

# 文件重命名
# os.rename(src='a.txt', dst='a.log')
# -----------------------------------------
# 删除文件
# os.remove('a.log')
# -----------------------------------------
# 创建文件夹
# os.mkdir('aa')
# os.mkdir('aa\cc')
# -----------------------------------------
# 获取当前目录
print(os.getcwd())  # D:\Program Files\Pycharm\Pycharm Projects\pythonProject\HELLO WORD\09.文件操作
# -----------------------------------------
# 列出当前文件夹所有文件
print(os.listdir())
# 列出桌面所有内容
print(os.listdir('C:\\Users\\76516\\Desktop'))
# -----------------------------------------
# 删除空文件夹
# os.rmdir('aa\\cc')
os.rmdir('aa')
  • 案例

  • 递归删除

# 删除文件夹内所有jpg文件

import os


def deleteJpg(path):
    # 列出所有文件和文件夹
    dirs = os.listdir(path)
    print(dirs)
    # 进入文件夹,判断文件是否是.jpg结尾,是就删除;判断是否是文件夹,如果存在打开查看是否有.jpg文件
    for d in dirs:
        if os.path.isfile(path + '\\' + d):  # 判断是否是文件
            if d.endswith('.jpg'):  # 如果是.jpg文件
                # 删除这个文件
                os.remove(path + '\\' + d)
        # 如果是文件夹,进入
        else:
            deleteJpg(path + '\\' + d)  # 自身调用


# 调用函数
deleteJpg('根路径')
  • 录入字典信息

# 创建一个文件夹,然后键盘录入学生信息,以字典的形式保存到文件中
import os
import json

# 判断文件是否存在 os.path.exists()
if not os.path.exists('test'):
    # 如果不存在就创建文件夹
    os.mkdir('test')  # 当文件存在时无法创建该文件
# 写到文件中
s = open(file='test//student.txt', mode='w', encoding='UTF-8')
list = []
for i in range(1, 3):
    print(f'请输入第{i}个学生信息')
    dict = {}
    dict['username'] = input('请输入学生姓名:\n')
    dict['age'] = input('请输入学生年龄:\n')
    dict['gender'] = input('请输入学生性别:\n')
    list.append(dict)
# 将列表类型转换为字符串进行输出.真正转换不能直接使用str(),应该使用json.dumps()将列表(字典)转化为字符串
s.write(json.dumps(list))
s.close()
  • 读取如上文件,并将数据封装成字典的形式,并遍历文件信息

# 读取如上文件,并将数据封装成字典的形式,并遍历文件信息
import json

s = open(file='test//student.txt', mode='r', encoding='UTF-8')
str = s.read()
print(str, type(str))  # [{'username': '张三', 'age': '18', 'gender': '男'}, {'username': '李四', 'age': '17', 'gender': '女'}] <class 'str'>
# 将字符串转换为列表形式
list = json.loads(str)
for i in list:
    print(i['username'], i['age'], i['gender'])
s.close()
# json.loads()  将字符串转换成字典(列表)形式
# json.dumps() 将字典列表转换成字符串格式
dict = {'username': 'zhangsan', 'password': '123', 'hobby': None}
# 转换成字符串格式
a = json.dumps(dict)
print(a)  # {"username": "zhangsan", "password": "123", "hobby": null} 其中null为通用格式

# 将字符串转化为字典形式
b = json.loads(a)
print(b)  # {'username': 'zhangsan', 'password': '123', 'hobby': None}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值