python函数中--文件操作

一、文件操作

1.文件作用:可以永久的保存数据。
2.文件在硬盘中存储的格式是二进制。
1.打开文件,是文件从硬盘中存在内存中

def open(file, mode='r',encoding=None)
# file 要操作的文件名字,类型是str
# mode,文件打开的方式,r(read)只读打开,w(write)只写打开 a(append)追加打开
# encoding 文件的编码格式,常见的编码格式有两种,一种是gbk,一种是utf-8
# 返回值,文件对象,后续所有的文件操作,都需要通过这个文件对象进行
open()

2.读写文件 文件对象.read()
3.关闭文件 文件.close() 将内存中三大文件同步到硬盘中
注意:1.open函数打开文件,没有指定文件的编码,windows默认是gbk,
2.write函数 将 你好 ,中国 写入文件中,使用gbk编码写入
3.在pycharm 中双击打开文件,默认使用的编码是utf-8
4.使用utf-8编码打开gbk编码的数据,出现乱码
编码:就是如何将中文汉字变为二进制,或者如何将二进制转换为汉字
解决方案:是两种方式的编码统一即可
方案一:open 打开文件的时候,指定使用utf-8打开
方案二:pycharm中使用gbk的方式打开
a 方式打开文件,追加内容,在文件的末尾写入内容
注意点:1.不管是a方式打开文件,还是w方式打开文件,写内容,都是使用write()函数
2.文件不存在,会创建文件

1.文件读操作

readline() #一次读取一行的内容,返回值是读取到的内容(str)
readlines() #按行读取,一次读取所有行,返回值是列表,列表中的每一项是一个字符串,及一行的内容

2.模拟读取大文件

1.read() 一次读取全部的内容
2.read() 读到文件末尾会返回空

#方式一:
f = open('a.txt', 'r', encoding='utf-8')
while True:
    buf = f.readline()
    if buf:  # if len(buf) >0 容器,可以直接作为判断条件,容器中有内容,为True,没有数据是False
        print(buf, end='')
    else:
        # 文件读完了
        break
f.close()
#方式二:
f = open('a.txt', 'r', encoding='utf-8')
while True:
    buf = f.read(5)
    if buf:
        print(buf,end='')
    else:
        break
f.close()

1. 补充:计算机中的大小

1.计算机只认识0和1,
进制:二进制:只有0和1组成,遇二进一
十进制:0,1,2,3,4,5,6,7,8,9,遇10进1
十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 遇十六进一
2.计算机最小单位是bit(位),只有两个数据0和1
字节:是计算机中最基本的储存单位byte
1byte=8bit
1KB=1024 byte
1MB=1024KB
1GB=1024MB
1TB=1024GB

2.文件打开模式

1.文本文件:txt, .py, .md 能够使用记事本打开的文件
2.二进制文件:具有特殊格式的文件,mp3 mp4 rmvb avi png jpg 等
3.文本文件可以使用 文本方式打开文件,也可以使用二进制的方式打开文件
4.二进制文件,只能使用二进制的方式打开文件
5.二进制打开方式如下:不管读取,还是书写,都需要使用二进制的数据 rb wb ab
6.注意点:不能指定encoding参数
在这里插入图片描述
在这里插入图片描述

3.应用—文件备份

1.用只读的方式,打开文件
2.读取文件内容
3.关闭文件
4.只写的方式,打开新文件
5.将第2部读取的内容写入新文件
6.关闭新文件
思考:1.如果文件比较大,循环读取文件
2.复制备份的文件可能是txt文件,可能是 二进制文件,----使用二进制方式打开文件

# 1.用只读的方式,打开文件
f = open('a.txt', 'rb')
# 2.读取文件内容
buf = f.read()
# f.readline() #一次读取一行的内容,返回值是读取到的内容(str)
# f.readlines() #按行读取,一次读取所有行,返回值是列表,列表中的每一项是一个字符串,及一行的内容-----#内建函数eval()去除引号
# 3.关闭文件
f.close()
# 4.只写的方式,打开新文件
f_w = open('a[备份].txt', 'wb')
# 5.将第2步读取的内容写入新文件
f_w.write(buf)
# 6.关闭文件
f_w.close()
#____________________________________________________
# 版本二:
# 1.用只读的方式,打开文件
file_name = input('输入要备份文件名:')
f = open(file_name, 'rb')
# 2.读取文件内容
buf = f.read()
# 3.关闭文件
f.close()
# 根据原文件名,找到文件后缀和文件名
index = file_name.rfind('.')
# 后缀 file_name[index:]
# 新文件名
new_file_name = file_name[:index] + '[备份]' + file_name[index:]
# 4.只写的方式,打开新文件
f_w = open(new_file_name, 'wb')
# 5.将第二步读取的内容写入新文件
f_w.write(buf)
# 6.关闭新文件
f_w.close()

二.文件和文件夹的操作

有时候,需要对文件进行重命名,删除等一些操作,python的os模块中都有这么功能
1.文件重命名
os模块中的rename()可以完成对文件的重命名操作
rename(需要修改的文件名,新的文件名)

import os
os.rename('毕业论文.txt','毕业论文-最终版.txt')

2.删除文件
os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)

import os
os.remove('毕业论文.txt')

3.创建文件夹

import os
os.mkdir('张三')

4.获取当前目录

import os
os.getcwd()

5.改变默认目录

import os
os.chdir('../')

6.获取目录列表

import os
os.listdir('./')

7.删除文件夹

import os
os.rmdir('张三')

三.批量修改文件名

# 第一步先创建文件
def create_files_1():
    os.chdir('test')
    for i in range(10, 20):
        file_name = 'file_' + str(i) + '.txt'
        print(file_name)
        f = open(file_name, 'w')
        f.close()
    os.chdir('../')  # ../上一级目录


create_files_1()
# 第二步修改文件名

def modify_filename():
    os.chdir('test')
    buf_list = os.listdir()
    print(buf_list)
    for i in buf_list:
        new_file = 'pt_43' + i
        print(i)
        num = len('pt_43')
        new_file = i[num:]
        os.rename=(i,new_file)
    os.chdir('../')  # ../上一级目录



modify_filename()

三.学生管理系统文件版

1.学生管理系统
2.{'name':'isaac','age':18,'gender':m}
3.[{},{}]
4.需要将所有的学生信息保存到文件中,最简单的方法,是将整个列表保存到文件中
5.'[{},{},{}]'
6.w

对学生系统文件进行保存

###---------------------学生管理系统-----------------
import os


def show_menu():
    print('1.添加学生')
    print('2.删除学生')
    print('3.修改学生信息')
    print('4.查询单个学生信息')
    print('5.查询所有的学生信息')
    print('6.退出系统')


stud_list = []


def insert_studet():
    # 通过input函数获取学生的信息,姓名,年龄,性别
    name = input('输入学生姓名:')
    for j in stud_list:
        if j['name'] == name:
            print('学生信息存在,不在添加')
            return  # 结束函数执行
    age = input('输入学生年龄:')
    gender = input('输入学生性别:')
    # • 将学生信息转换为字典进行保存
    stud_dict = {'name': name, 'age': age, 'gender': gender}

    # • 将这个学生字典添加的列表中
    stud_list.append(stud_dict)
    print('------------学生信息添加成功-------------')


def stud_remove():
    # 使用input获取要删除/修改/查询 的学生姓名
    name = input('输入学生名字')
    for stud in stud_list:
        # 判断学生信息是否存在
        if name == stud['name']:
            print('学生姓名存在')
            # 学生信息存在,对学生进行 删除/修改/查询/操作
            stud_list.remove(stud)  # 删除整个字典
            return
    else:
        print('该学生信息不存在,无法删除')


def stud_modify():
    name = input('输入学生名字')
    for stud in stud_list:
        if name == stud['name']:
            stud['age'] = int(input('输入新的年龄:'))
            return
    else:
        print('该学生信息不存在,无法删除')


def stud_single():
    name = input('输入查询学生姓名:')
    for i in stud_list:
        if name == i['name']:
            print(i)
            return
    else:
        print('没有查到此学生信息')


def show_all_stud():
    if len(stud_list):
        for i in stud_list:
            print(f'姓名:{i["name"]},年龄:{i["age"]},性别:{i["gender"]}')
    else:
        print('目前没有学生信息')


def save():
    f = open('student.txt', 'w')
    f.write(str(stud_list))
    f.close()  # 文件保存方法


def read():  # 读取文件
    global stud_list
    if os.path.exists('student.txt'):
        f = open('student.txt', 'r', encoding='utf-8')
        buf = f.read()
        if buf:
            stud_list = eval(buf)  # eval()去除引号
        f.close()


def main():
    while True:
        show_menu()
        opt = input('选择要进行的标号:')
        if opt == '1':
            print('1.添加学生')
            insert_studet()
        elif opt == '2':
            print('2.删除学生')
            stud_remove()
        elif opt == '3':
            stud_modify()
            print('3.修改学生信息')
        elif opt == '4':
            print('4.查询单个学生信息')
            stud_single()
        elif opt == '5':
            print('5.查询所有的学生信息')
            show_all_stud()
        elif opt == '6':
            save()
            print('6.退出系统')
            break
        else:
            print('输入有误,请重新输入')bu
            continue
        input('-----请按回车键在进行操作-------')


main()

-------------补充python函数的内容-----------------

While True:pass 使用场景,在书写代码的时候,不确定循环一共执行多少次,即不知道循环在什么时候结束,具体结束的时间,在运行代码的过程中才能确定,在代码中进行 if 判断,如果条件不满足,就使用break,终止循环
my_list=list() #创建列表类对象
my_dict=dict() #创建字典类对象
my_tuple =tuple() #创建元组类对象

文件操作练习

1.使用文件操作,向movie.txt文件中写入一下内容:
1.功夫,周星驰
2.一出好戏, 黄渤
3.我不是药神,徐峥

f = open('movie.txt', 'w', encoding='utf-8')
f.write('1.功夫,周星驰\n2.一出好戏, 黄渤\n3.我不是药神,徐峥')
f.close()

2.将第一题创=创建好的文件打开,并读取内容,要求如下:

  • 一次全部读取
  • 每次读取一行
# 第一种方式:
f = open('movie.txt', 'r', encoding='utf-8')
buf = f.read()

f.close()
print(buf)
# 第二种方式:
f = open('movie.txt', 'r', encoding='utf-8')
buf = f.readlines()
buf = [i.strip() for i in buf]  #这步是去除'\'换行符
f.close()
print(buf)
# 第三种方法:
f = open('movie.txt', 'r', encoding='utf-8')
# 因为readline ,每一次读取一行,需要我们使用循环读取
while True:
    buf = f.readline()
    # 当我们读取的内容是空字符的时候跳出循环
    if buf == '':
        break
    print(buf)
f.close()

3.题干:

  • 使用os模块创建一个名为‘黑马’的文件夹
  • 获取黑马文件夹当前所在目录
  • 获取当前目录列表
  • 改变文件的操作路径
  • 将黑马文件删除
import os

os.mkdir('黑马')
os.getcwd()
os.listdir('./')
os.chdir('../')
os.rmdir('黑马')

4.编写一段代码以完成两份文件之间的相互备份

  • 提示用户输入文件名。例如:gailun.txt
  • 创建以用户输入的名字的文件
  • 打开文件写入如下信息:
    1.功夫,周星驰
    2.一出好戏, 黄渤
    3.我不是药神,徐峥
  • 将输入的数据输出到终端上
  • 在文件夹中创建gailun副本.txt文件
  • 将gailun.txt文件中的数据写入gailun副本.txt文件中
  • 打开文件,查看文件中内容
# 1.提示输入文件
oldFileName = input('请输入要创建文件:')
# 以写的方式打开文件
oldFile = open(oldFileName, 'w', encoding='utf-8')
# 写
oldFile.write('1.功夫,周星驰\n2.一出好戏, 黄渤\n3.我不是药神,徐峥')
oldFile.close()
# 读取文件
f = open(oldFileName, 'r', encoding='utf-8')
buf = f.readlines()
print(buf)
f.close()
# 提取文件名后缀
insert = oldFileName.rfind('.')
# 确定文件名有没有后缀
if insert > 0:
    fileFlag = oldFileName[:insert]
# 组织新的文件名字
newFileName = oldFileName[insert:] + '副本' + fileFlag
# 创建新的文件副本:
newfile = open('newFileName', 'w', encoding='utf-8')
for i in buf:
    print(i)
    newfile.write(i)
newfile.close()
# 读取副本:
f1 = open('newFileName', 'r', encoding='utf-8')
buf1 = f1.readlines()
print(buf1)
f1.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最初的梦10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值