美文网首页《IT藏经阁》
Python中的文件操作、综合应用

Python中的文件操作、综合应用

作者: 辽A丶孙悟空 | 来源:发表于2019-03-25 23:13 被阅读249次
一、文件操作介绍
  • 什么是文件

示例如下:


文件.png
  • 文件的作用
  • 大家应该听说过一句话:“好记性不如烂笔头”。

  • 不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”

  • 可见,在把数据存储起来有做么大的价值

  • 使用文件的目的:
    就是把一些存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力

二、文件的打开与关闭
  • 想一想:

如果想用word编写一份简历,应该有哪些流程呢?

  • 打开word软件,新建一个word文件
  • 写入个人简历信息
  • 保存文件
  • 关闭word软件

同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的

  • 打开文件,或者新建立一个文件
  • 读/写数据
  • 关闭文件
  • 打开文件
  • 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
    open(文件名,访问模式)
    示例如下:
    f = open('test.txt', 'w')
  • 说明:


    文件说明.png
  • 关闭文件

close( )

  • 示例如下:
# 新建一个文件,文件名为:test.txt
f = open('test.txt', 'w')

# 关闭这个文件
f.close()
  • 结果:


    结果.png
    结果1.png
三、文件的读写
  • 写数据(write)
  • 使用write()可以完成向文件写入数据
  • demo:
f = open('test.txt', 'w')#打开或创建文件
f.write('hello world, i am here!')#向文件中写的内容
f.close()
  • 结果:


    结果.png
  • 注意:
    如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
  • 读数据(read)
  • 使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
  • demo:
f = open('test.txt', 'r')
content = f.read(5)
print(content)

print("-"*30)
content = f.read()
print(content)

f.close()
  • 结果:


    结果.png
  • 注意:
    • 如果open是打开一个文件,那么可以不用谢打开的模式,即只写 open('test.txt')
    • 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
  • 读数据(readlines)
  • 就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
  • demo:
#coding=utf-8

f = open('test.txt', 'r')
content = f.readlines()
print(type(content))

i=1
for temp in content:
   print("%d:%s"%(i, temp))
   i+=1

f.close()
  • 结果:


    结果.png
  • 读数据(readline)
  • demo:
#coding=utf-8

f = open('test.txt', 'r')

content = f.readline()
print("1:%s"%content)

content = f.readline()
print("2:%s"%content)

f.close()
  • 结果:


    结果.png
  • 想一想:

如果一个文件很大,比如5G,试想应该怎样把文件的数据读取到内存然后进行处理呢?


想一想.png
四、应用1:制作文件的备份
  • 任务描述

输入文件的名字,然后程序自动完成对文件进行备份

  • demo:
# 提示输入文件
oldFileName = input("请输入要拷贝的文件名字:")

# 以读的方式打开文件
oldFile = open(oldFileName,'rb')

# 提取文件的后缀
fileFlagNum = oldFileName.rfind('.')
if fileFlagNum > 0:
   fileFlag = oldFileName[fileFlagNum:]

# 组织新的文件名字
newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag

# 创建新文件
newFile = open(newFileName, 'wb')

# 把旧文件中的数据,一行一行的进行复制到新文件中
for lineContent in oldFile.readlines():
   newFile.write(lineContent)

# 关闭文件
oldFile.close()
newFile.close()
  • 结果:


    结果1.png
    结果.png
    结果.png
五、文件的定位读写
  • 什么是定位?
图.png
图1.png
图2.png
  • 获取当前读写的位置
  • 在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取
  • demo:
# 打开一个已经存在的文件
f = open("test.txt", "r")
str = f.read(3)
print("读取的数据是 : ", str)

# 查找当前位置
position = f.tell()
print("当前文件位置 : ", position)

str = f.read(3)
print("读取的数据是 : ", str)

# 查找当前位置
position = f.tell()
print("当前文件位置 : ", position)

f.close()
  • 结果:


    结果.png
  • 定位到某个位置

如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset, from)有2个参数

  • offset:偏移量
  • from:方向
    • 0:表示文件开头
    • 1:表示当前位置
    • 2:表示文件末尾
  • demo:把位置设置为:从文件开头,偏移5个字节
# 打开一个已经存在的文件
f = open("test.txt", "r")
str = f.read(30)
print("读取的数据是 : ", str)

# 查找当前位置
position = f.tell()
print("当前文件位置 : ", position)

# 重新设置位置
f.seek(5, 0)

# 查找当前位置
position = f.tell()
print("当前文件位置 : ", position)

f.close()
  • 结果:


    结果.png
  • demo:把位置设置为:离文件末尾,3字节处
# 打开一个已经存在的文件
f = open("test.txt", "rb")

# 查找当前位置
position = f.tell()
print("当前文件位置 : ", position)

# 重新设置位置
f.seek(-3,2)

# 读取到的数据为:文件最后3个字节数据
str = f.read()
print("读取的数据是 : ", str)

f.close()
  • 结果:


    结果.png
六、文件、文件夹的相关操作

有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这么功能

  • 文件重命名
  • os模块中的rename()可以完成对文件的重命名操作
    rename(需要修改的文件名, 新的文件名)
import os

os.rename("毕业论文.txt", "毕业论文-最终版.txt")
  • 删除文件
  • os模块中的remove()可以完成对文件的删除操作
    remove(待删除的文件名)
import os

os.remove("毕业论文.txt")
  • 创建文件夹
import os

os.mkdir("张三")
  • 获取当前目录
import os

os.getcwd()
  • 改变默认目录
import os

os.chdir("../")
  • 获取目录列表
import os

os.listdir("./")
  • 删除文件夹
import os

os.rmdir("张三")
七、应用2:批量修改文件名
  • 运行过程演示
  • 运行程序之前


    结果.png
  • 运行程序之后


    结果1.png
  • demo:
# coding=utf-8

# 批量在文件名前加前缀

import os

funFlag = 1  # 1表示添加标志  2表示删除标志

folderName = './Test/'

# 获取指定路径的所有文件名字
dirList = os.listdir(folderName)

# 遍历输出所有文件名字
for name in dirList:
   print()
   name

   if funFlag == 1:
       newName = '[赵四出品]-' + name
   elif funFlag == 2:
       num = len('[赵四出品]-')
       newName = name[num:]
   print()
   newName

   os.rename(folderName + name, folderName + newName)
  • 注意:
  • 以上程序,在运行之前请先建立info_data.data文件,并且写入一对中括号[]即可
  • 等到后面讲解完异常之后就解决了这个问题
八、综合应用:学生管理系统(文件版)
  • 参考代码:
# 添加
def add_stu():
   print('*********添加学员**********')
   name = input('请输入学员姓名:')
   age = input('请输入学员的年龄:')
   sex = input('请输入学员性别(男/女):')
   phone = input('请输入手机号:')
   student = [name, age, sex, phone]
   student_list.append(student)


# 查询
def query_stu(type):
   print('*************%s学员**************' % type)
   print('1.查询所有学员')
   print('2.输入学员姓名查询 ')
   num = int(input('选择操作:'))
   if num == 1:
       for x in range(0, len(student_list)):
           student = student_list[x]
           name = student[0]
           age = student[1]
           sex = student[2]
           phone = student[3]
           print('序号:%s 姓名:%s 年龄:%s 性别:%s 手机号:%s' % (x, name, age, sex, phone))
       return student
   else:
       name = input('请输入学员姓名:')
       while 1:
           rs = False
           for student in student_list:
               if student[0] == name:
                   index = student_list.index(student, 0, len(student_list))
                   print('序号:%s 姓名:%s 年龄:%s 性别:%s 手机号:%s' % (
                   index, student_list[index][0], student_list[index][1], student_list[index][2],
                   student_list[index][3]))
                   rs = True
           if rs == False:
               name = input('未找到学员,请重输:')
           else:
               break
       return student


# 封装判断选择序号是否符合范围的函数
# 带返回值的函数,函数执行完会返回一个结果,可以声明变量接受这个结果
def select_num(type):
   index = input('请选择要%s的学员序号:' % type)
   index = int(index)
   while index not in range(0, len(student_list)):
       index = input('选择的学员不存在,请重选:')
       index = int(index)
   # 返回选择的序号
   return index


# 修改
def alter_stu():
   if len(student_list) == 0:
       print('没有学员信息,无法进行修改操作!')
       # 强制结束函数的执行,return下面的代码都不会再执行
       return
   query_stu('修改')
   index = int(select_num('修改'))
   student = student_list[index]
   new_name = input('请输入修改后的姓名(%s):' % student[0])
   new_age = input('请输入修改后的年龄(%s):' % student[1])
   new_sex = input('请输入修改后的性别(%s):' % student[2])
   new_phone = input('请输入修改后的手机号(%s):' % student[3])
   student[0] = new_name
   student[1] = new_age
   student[2] = new_sex
   student[3] = new_phone
   print('修改学员成功')


# 删除
def dele_stu():
   query_stu('删除')
   index = select_num('删除')
   rs = input('是否真的删除(y/n):')
   if rs == 'y':
       student_list.pop(index)
       print('删除成功')
   else:
       print('删除数据操作已取消!')


# 存储至本地文件
def save_data():
   file_handle = open('student.v2.txt', 'w')
   for student in student_list:
       # 把列表中的数据用空格分开拼接为一个字符串
       s = ' '.join(student)
       file_handle.write(s)
       file_handle.write('\n')
   file_handle.close()


# 引入python内置函数os
import os


# 读取文件内容
def read_data():
   # 判断文件是否存在,如果存在,在做打开文件的操作
   # 如果文件存在返回true,否则返回False
   rs = os.path.exists('student.v2.txt')
   if rs == True:
       # 1,打开文件
       file_handle = open('student.v2.txt', mode='r')
       # 2.读取所有行
       contents = file_handle.readlines()
       # 3.取出每一个姓名
       for msg in contents:
           # 去除\n
           msg = msg.strip('\n')
           # 使用 空格分割字符串
           student = msg.split(' ')
           # 将小列表添加到大列表中
           student_list.append(student)
       file_handle.close()


# 声明一个大列表,存放学员姓名
student_list = []
read_data()
while 1:
   print('****************学员管理系统*****************')
   print('*****************1.添加学员*****************')
   print('*****************2.修改学员*****************')
   print('*****************3.查询学员*****************')
   print('*****************4.删除学员*****************')
   print('*****************0.退出程序*****************')
   num = input('请选择你的操作:')
   num = int(num)
   while num not in range(0, 5):
       num = int(input('您选择的选项不存在,请重选:'))
   if num == 1:
       # 添加学员
       add_stu()
       save_data()
   elif num == 2:
       # 修改学员
       alter_stu()
       save_data()
   elif num == 3:
       # 查询学员
       query_stu('查询')
   elif num == 4:
       # 删除学员
       print('1.通过序号删除学员')
       print('2.删除全部学员')
       print('3.根据学员姓名删除')
       num = input('请选择操作:')
       num = int(num)
       while num not in range(1, 4):
           num = int(input('所输选项不存在,请重输:'))
       if num == 1:
           dele_stu()
       elif num == 2:
           rs = input('是否真的删除(y/n):')
           if rs == 'y':
               student_list.clear()
               print('删除成功')
           else:
               print('删除数据操作已取消!')
       else:
           name = input('请输入想要删除学员的姓名:')
           rs = input('是否真的删除(y/n):')
           if rs == 'y':
               while 1:
                   rs = False
                   for student in student_list:
                       if student[0] == name:
                           student_list.remove(student)
                           print(student_list)
                           print('删除成功')
                           rs = True
                   if rs == False:
                       # print('未找到请重新输入')
                       name = input('未找到学员,请重输:')
                   else:
                       break
           else:
               print('删除数据操作已取消!')
       save_data()
   else:
       print('退出程序')
       break
  • 运行截图:


    结果.png
    查询所有.png
    根据姓名查询.png
    添加.png
    修改.png
    删除.png

相关文章

  • Python中的文件操作、综合应用

    一、文件操作介绍 什么是文件 示例如下:文件.png 文件的作用 大家应该听说过一句话:“好记性不如烂笔头”。不仅...

  • day07.文件操作/综合应用【Python教程】

    day07.文件操作/综合应用【Python教程】 一、文件操作介绍 <1>什么是文件 示例如下: <2>文件的作...

  • 14.Python之文件操作

    Python之文件操作 文件操作通过Python中的内置函数open()对文件进行操作。文件操作需要如下几个参数:...

  • 初试shell脚本,确实高效

    给变量赋值 列出文件夹中的所有文件 新建文件夹(注意:中括前后必须有空格) 截取字符串 调用python 综合应用

  • 文件操作

    Python基础教程 文件内容操作 python中的文件操作还是挺简单的,类似于php中的文件方法,精简好用。我们...

  • 解析Python中的文件操作

    1.简介 在Python中无需引入额外的模块来进行文件操作,Python拥有内置的文件操作函数(除了内置文件操作函...

  • Python 文件操作

    一. Python 读写 创建文件 Python中对文件,文件夹(文件操作函数)的操作需要涉及到OS 模块和 sh...

  • python--文件的基本操作

    python编程中,文件是必不可少的。下面我们来学习python中文件的基本操作。 文件的基本操作: 在pytho...

  • python常用文件操作总结

    python 移动文件或文件夹操作。python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法...

  • 2021-02-23 Python day11-15

    在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、...

网友评论

    本文标题:Python中的文件操作、综合应用

    本文链接:https://www.haomeiwen.com/subject/fpfivqtx.html