python文件操作

本文介绍了Python中文件的基本操作,包括读写模式、追加模式及其应用场景。还讲解了文件的打开与关闭,以及如何实现文件的拷贝。此外,文章探讨了文件指针的定位方法,并通过实例展示了with语句在文件操作中的应用。同时,文章涵盖了os模块的常用函数,用于文件和目录的管理。最后,提到了JSON数据格式在Python中的转换,并提供了相关示例。

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

python文件的基本操作

文件操作:

文件操作功能
r对文件只读形式打开
w对文件只写形式打开,若文件不存在则会创建文件,文件存在有内容的话则会清空内容
a对文件内容进行添加,指针位置在文件内容的最后
r+从开始的地方进行追加
w+从头开始读写
a+从尾部进行追加

注意事项:若为二进制文件,如图片、视频等使用rb、wb、ab方式进行打开

文件打开与关闭的方式

文件打开方式:f = open("文件名")
文件关闭方式:f.close()
实例:实现文件的拷贝
代码:

f = open("westos",'r')
file = f.read()
f.close()
f1 = open("westos1",'w')
f1.write(file)
f.close()

运行结果
westos内容:在这里插入图片描述

westos1内容:在这里插入图片描述

file对象的常用方法:

1.读

  • read:读取的指定字节,默认1024
  • readline:读取文件的一行内容
  • readlines:读取文件的所有内容,返回一个列表

2.写

  • write:从指针所在位置写入,写入是字符串内容
  • writelines:将列表里面的每个元素写入文件中

3.定位

  • tell:指针当前所在位置
  • seek(offset,from):指针移动位置(offset为偏移量,from=0为移动指针到文章开头,from=1指代当前位置,from=2为移动指针到文章结尾)

实例:移动指针

f = open("westos",'a+')
f.write("\nnew line")
content = f.read()
print(content)
print("当前指针的位置是:",f.tell())
f.seek(0,0)
print("当前指针的位置是:",f.tell())
content = f.read()
print(content)
f.close()

运行结果在这里插入图片描述

python中的with语句(安全上下文)

with语句:python中的with语句适用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的“清理”操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。使用该语句的时候文件可以进行for循环。
实例:按行读取文件
代码:

with open("westos",'r') as f:
    line = 0
    for i in f:
        line += 1
        print("第%s行的内容为:"%(line),i)

运行结果:在这里插入图片描述

os

os:语义为操作系统,处理操作系统相关的功能,可跨平台。比如显示当前目录下所有文件/删除某个文件/获取文件大小

os模块指令功能
os.name()查看当前电脑的操作系统(nt:当前是windows系统,posix:当前是linux系统)
os.uname()查看当前操作系统的详细信息,在windows中需要加入platform模块
os.path.isabs()判断是否为绝对路径
os.path.abspath()生成绝对路径
os.path.join()返回一个绝对路径:当前目录绝对路径+文件名/目录名
os.path.basename()获取文件名
os.path.dirname()获取目录名
os.makedirs()递归创建目录
os.mkdir()创建目录
os.rmdir()删除目录
os.mknod()创建文件
os.remove()删除文件
os.rename()文件重命名
os.path.exists()判断文件是否存在
os.path.splitest()分离后缀名
os.path.split()

查看当前系统信息

import platform
import os
print(platform.uname())

运行结果:在这里插入图片描述

Json

  • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集
  • JSON采用完全独立于语言的文本格式,但是也使用了类似C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)
  • 这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)

python类型数据和JSON数据格式的互相转换
从JSON到Python:decode(load或loads)在这里插入图片描述
从Python到JSON:encode(jump或jumps)在这里插入图片描述
注意事项:
1.python中的str类型到JSON中转为unicode类型,None转为null,dict对应object
2.python中的集合不能转成json格式

实例1.将python数据类型转换为json字符串
代码:

langs = {
    "c语言":{
        "2020-8":20,
        "2020-9":25,
    },
    "python":{
        "2020-8":30,
        "2020-9":18,
    },
}
import json
result = json.dumps(langs,ensure_ascii=False)
print(result)

运行结果:在这里插入图片描述
实例2.将json的格式转换成python,并统计c语言和python的热度值
代码:

import json
with open("langs.json",'w',encoding='utf-8') as f:
    json.dump(langs,f,indent=4,ensure_ascii=False)
    print("存储完成")
with open("langs.json",encoding='utf-8') as f:
    lang = json.load(f)
    print(langs)
for name,info in lang.items():
    sum_value = 0
    for key,value in info.items():
        sum_value += value
    print("%s的热度值为:"%(name),sum_value)

运行结果:在这里插入图片描述
作业:
1.读取一个文件,显示除了以#为开头行以外的所有行
代码:

with open("#",'r',encoding='utf-8') as f:
    for i in f:
        if not i.startswith('#'):
            print(i)

文件内容:在这里插入图片描述
运行结果:在这里插入图片描述
2.学生信息管理系统(文件版)
(1)必须使用自定义函数,完成对程序的模块化
(2)学生信息至少包含:姓名、年龄、学号,除此以外可以适当添加
(3)必须完成的功能:添加、删除、修改、查询、退出
代码:

import os
import json
def add(num):
    if num not in gl.keys():
        name = input('请输入学生姓名:')
        age = int(input('请输入年龄:'))
        gl.update({num:{'姓名':name,'年龄':age}})
        clear(gl)
        print("学号是%s的学生信息已添加成功"%(number))
    else:
        print("学号是%s的学生信息已存在"%(number))
def delete(num):
    if num in gl.keys():
        gl.pop(num)
        clear(gl)
        print("学号是%s的学生信息已被删除"%(num))
    else:
        print("学号是%s的学生信息不存在"%(num))
def change(num):
    if num in gl.keys():
        ch = input("请输入要修改的学生信息(姓名|年龄):")
        content = input("修改该学生的%s为:"%(ch))
        gl[num].update({ch:content})
        clear(gl)
        print("学号是%s的学生信息更改成功"%(num))
    else:
        print("学号是%s的学生信息不存在"%(num))
def look(num):
    if num in gl.keys():
        print(gl[num])
    else:
        print("学号是%s的学生信息不存在" % (num))
def clear(d):
    with open('学生信息管理','w') as f:
        json.dump(d,f,indent=4,ensure_ascii=False)
while True:
    put = input("请选择想要使用的功能(添加|删除|修改|查询|退出):")
    if os.path.exists("学生信息管理"):
        if os.path.getsize("学生信息管理")!=0:
            with open("学生信息管理",mode='r') as f:
                gl = json.load(f)
        else:
            gl = {}
    else:
        gl = {}
    if put == '退出':
        break
    elif put == '添加':
        number = input('要添加的学生学号:')
        add(number)
    elif put == '删除':
        number = input('要删除的学生学号:')
        delete(number)
    elif put == '修改':
        number = input("请输入要修改的学生学号:")
        change(number)
    elif put == '查询':
        number = input("请输入要查询的学生学号:")
        look(number)

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值