Python中的文件操作

本文介绍了Python中关于文件操作的基础知识,包括打开文件的多种模式(如'r', 'w', 'a', 'w+', 'a+'等),文件对象的属性如mode、name和closed,以及read、write和readlines等方法。还提到了文件指针定位的tell和seek方法,以及with语句在文件操作中的应用。此外,还讨论了如何利用os模块进行文件和目录的管理,如创建、删除、判断文件存在和获取文件大小等。最后,简述了JSON格式及其在Python中的转换,并给出了相关练习,如批量创建文件和实现学生管理系统(文件版)。" 112813747,10295631,Android Studio 中CMakeLists配置第三方库依赖,"['Android开发', 'cmakelist', '库依赖', 'NDK开发']

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

文件操作介绍
操作文件
打开文件
在python代码中open命令可以打开一个已经存在的文件,或者创建一个不存在的文件(默认参数为’r’)
当使用r参数打开文件,表示只是读取文件,文件必须存在
当使用w参数打开文件,表示可以对文件有写权限,文件不存在时会创建文件,文件存在时会清空里边数据并且将自定义数据写入
w+参数:w参数和r参数结合
当使用a参数打开文件,表示可以对文件有写权限,文件不存在时会创建文件,文件存在时会在文件末尾追加自定义数据
a+参数:a参数和r参数结合
b参数:一般与r,w,a参数配合使用,主要用途为打开二进制文件,例如,视频文件和图片文件
在这里插入图片描述
文件对象的属性
mode:查看文件属性
name:查看文件名称
closed:关闭文件(每次打开文件操作完成后记得关闭文件)
read:读取文件
write:自定义写入的数据
readlines:读取文件所有内容返回一个列表
在这里插入图片描述
指针定位
读取和写入文件时,都是以光标为基准在后边读取或写入内容,如果用a权限打开文件,这时就需要用到指针定位
tell:指针当前所在位置
在这里插入图片描述

seek:移动指针位置
seek有两个参数,偏移量和方向
0表示文件开头
1表示当前位置
2表示文件末尾
在这里插入图片描述

with语句
with语句可以帮助我们在对文件完成操作后自动关闭文件
在这里插入图片描述
练习1
有两个分别名为txt和jpg文件,请备份这两个文件
在这里插入图片描述
os模块
os,语义为操作系统,处理操作系统相关的功能,可跨平台。比如显示当前目录下所有文件、删除某个文件、获取文件大小
参数
os.name:查看操作系统名称,Windows为nt,linux为posix
os.mkdir:创建目录
os.mknod:建立文件(只能在linux中使用)
os.rmdir:删除目录
os.remove:删除文件
os.path.exists:判断一个文件是否存在
os.path.getsize:判断一个文件是否为空
os.path.isabs:判断是否为绝对路径,文件不存在也会判断,(判断文件前有没有加路径符号)
os.path,abspath:生成绝对路径
os.path.join(当前目录的绝对路径,文件名/目录名):返回一个绝对路径,当前目录的绝对路径+文件名/目录名
os.path.basename:获取文件名
os.path.dirname:获取目录名
在这里插入图片描述
练习2
批量创建文件,文件名为hello{1…5}后缀分别为(.txt,.jpg,.gif)
在这里插入图片描述
json模块
JSON是一种轻量级的数据交换格式
JSON采用完全独立于语言的文本格式但是也使用了类似于C语言家族的习惯
这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成
json格式转换
python转json格式使用dumps参数,或者使用dump格式直接将python格式转换成json格式并且存储到一个文件
json格式转pthon使用load或loads参数
练习3
读取一个文件显示除了以“#”开头以外的所有的行
在这里插入图片描述
练习4
学生管理系统(文件版)
1:必须使用自定义函数完成对程序的模块化
2:学生信息至少包含:姓名,年龄,学号,除此之外可以适当添加
3:必须完成的功能:添加,删除,修改,查询,退出

import json
import caozuo
def info(name,age:int,StudentID,**kwargs):
    return {StudentID:{'姓名':name,'年龄':age,'成绩':kwargs}}
if __name__ == '__main__':
    while True:
        operate = input('请输入想要进行的操作(add,,remove,revise,inquire,exit):')
        if operate == 'add':
            name = input('请输入学生姓名: ')
            age = int(input('请输入学生年龄:'))
            StudentID  = input('请输入学生学号:')
            grades = input('请输入学生成绩:')
            line = info(name=name,age=age,StudentID=StudentID,grades=grades)
            if not caozuo.path.getsize('实验/学生管理文件.json'):
                with open('实验/学生管理文件.json',mode='w',encoding='utf-8') as f:
                    json.dump(line,f,indent=4,ensure_ascii=False)
            else:
                with open('实验/学生管理文件.json', mode='r', encoding='utf-8') as f:
                    d = json.load(f)
                if StudentID in d:
                    print('该学号已存在,请输入正确学号!')
                else:
                    with open('实验/学生管理文件.json', mode='w', encoding='utf-8') as f:
                        d.update(line)
                        json.dump(d,f,indent=4,ensure_ascii=False)
        elif operate == 'remove':
            while True:
                L = input('请输入删除学生信息学生的学号或者exit返回上层:')
                if L != 'exit':
                    with open('实验/学生管理文件.json',encoding='utf-8') as f:
                        langs = json.load(f)
                    if L not in langs:
                        print('该学号不存在,请输入正确学号!')
                    else:
                        with open('实验/学生管理文件.json',mode='w',encoding='utf-8') as f:
                            langs.pop(L)
                            json.dump(langs,f,indent=4,ensure_ascii=False)
                else:
                    break
        elif operate == 'revise':
            while True:
                L = input('请输入需要修改学生信息的学号或者exit返回上层:')
                if L != 'exit':
                    with open('实验/学生管理文件.json', encoding='utf-8') as f:
                        lang = json.load(f)
                    if L not in lang:
                        print('该学号不存在,请输入正确学号!')
                    else:
                        new_name = input('请输入修改后学生姓名: ')
                        new_age = int(input('请输入修改后学生年龄:'))
                        new_StudentID = input('请输入修改后学生学号:')
                        new_grades = input('请输入修改后学生成绩:')
                        new_line = info(name=new_name, age=new_age, StudentID=new_StudentID, grades=new_grades)
                        if new_StudentID in lang and new_StudentID != L:
                            print('该学号已存在')
                        else:
                            with open('实验/学生管理文件.json', mode='w', encoding='utf-8') as f:
                                lang.update(new_line)
                                json.dump(lang, f, indent=4, ensure_ascii=False)
                else:
                    break
        elif operate == 'inquire':
            while True:
                L = input('请输入需要查询学生信息的学生学号或输入exit返回上层:')
                if L != 'exit':
                    with open('实验/学生管理文件.json', encoding='utf-8') as f:
                        lan = json.load(f)
                    if L not in lan:
                        print('该学号不存在,请输入正确学号!')
                    else:
                        print(lan[L])
                else:
                    break
        elif operate == 'exit':
            exit()
        else:
            print('请输入正确的操作(add,remove,revise,inquire,exit)')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值