专栏首页技术开发——你我他实验五 Python文件操作实验
原创

实验五 Python文件操作实验

实验五 Python文件操作实验

一、实验目的与要求

1、掌握文件的打开和关闭。

2、掌握文件的不同操作,如读写、重命名、删除。

3、熟悉闭包、装饰器以及常见内置函数的使用。

二、实验原理

在python中,使用open方法打开文件,凡是打开的文件,切记要使用close方法关闭文件。向文件写数据,需要使用write方法来完成,在操作某个文件时,每调用一次write方法,写入的数据就会追加到文件末尾。读文件:方式1:使用read方法读取文件;方式2:使用readlines方法读取文件;方式3:使用readline方法一行一行读数据。文件的定位读写:方式1:使用tell方法来获取文件当前的读写位置;方式2:使用seek方法来获取文件当前的读写位置。os模块中的rename()方法可以完成文件的重命名;os模块中的remove()方法可以完成文件的删除操作。os模块的mkdir方法用来创建文件夹;os模块的getcwd方法用来获取当前的目录;os模块的chdir方法用来改变默认目录;os模块的listdir方法用于获取目录列表;os模块的rmdir方法用于删除文件夹。

Python函数是支持嵌套的。如果在一个内部函数中对外部函数作用域(非全局作用域)的变量进行引用,那么内部函数就会被称为闭包。闭包需要满足如下3个条件:(1)存在于两个嵌套关系的函数中,并且闭包是内部函数;(2)内部函数引用了外部函数的变量(自由变量);(3)外部函数会把内部函数的函数名称返回。

假设我们已经开发了一个本有的函数,后续可能会增加临时的需求,例如插入日志,我们可以增加一个包裹函数,由它来负责这些额外的需求,这个包裹函数就是装饰器。装饰器主要应用在如下场景:(1)引入日志;(2)函数执行时间统计;(3)执行函数前预备处理;(4)执行函数后清理功能;(5)权限校验;(6)缓存。装饰器是一个函数,它需要接收一个参数,该参数表示被修饰的函数。通过在函数定义的前面添加@符号和装饰器名,实现装饰器对函数的包装。多个装饰器应用在一个函数上,调用顺序是从下至上。如果给装饰器添加参数,需要增加一层包装,先传递参数,然后再传递函数名。

map函数会根据提供的函数对指定的序列做映射。map函数的作用是以参数序列中的每个元素分别调用function函数,把每次调用后返回的结果保存为对象;filter函数会对指定序列执行过滤操作;reduce函数会对参数序列中的元素进行累积。在Python 3中,reduce函数已经被从全局名字空间里面移除了,它现在被放置在fucntools模块中,使用时需要先引入。

三、预习与准备

1、提前预习Python文件操作以及高级函数的语法知识,实验之前编写好程序代码。

2、练习关于Python文件及文件夹的常见操作。

四、实验过程记载

实验题1分析程序运行结果:阅读下面的程序,分析代码是否能够编译通过。如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。

(1)def funX():

x = 5

def funY():

nonlocal x

x += 1

return x

return funY

a = funX()

print(a())

print(a())

print(a())

(2)def funX():

x = 5

def funY():

nonlocal x

x += 1

return x

return funY

a = funX

print(a()())

print(a()())

print(a()())

实验题2 已知有个列表[1,2,3,4,5],让列表的每个元素加1,把结果不能被2整除的元素筛选出来。

源码:

sum=map(lambda x:x+1,[1,2,3,4,5])
result=filter(lambda x:x%2,list(sum))
print(list(result))

实验题3 打开一个英文的文本文件,将该文件中的每个英文字母加密后写入到一个新文件。加密的方法是:将A变成B,B变成C,……,Y变成Z,Z变成A;a变成b,b变成c,……,y变成z,z变成a,其他字符不变化。

源码:

file=open("key.txt","r")
content=file.readline()
list1=list(content)
file.close()
for i in range(0,len(list1)):
    if list1[i].islower():
        if list1[i]=='z':
            list1[i]=chr(97)
            continue

        num=ord(list1[i])
        list1[i]=chr(num+1)
    if list1[i].isupper():
        if list1[i]=='Z':
            list1[i]=chr(65)
            continue
        num=ord(list1[i])
        list1[i]=chr(num+1)
new_Str=''.join(list1)
print(new_Str)
file=open("new.txt","w+")
file.write(new_Str)
file.close()

实验题4使用Python语言开发一个简单的学生管理系统。运用该学生管理系统编辑学生的信息,适时更新学生的资料。例如,新生入校,要在学生管理系统中录入刚入校的学生信息。请实现一个学生管理系统,要求如下。

(1)使用自定义函数,完成对程序的模块化;

(2)学生信息至少包含:姓名、性别及手机号;

(3)该系统具有的功能:添加、删除、修改、显示、退出系统;

(4)将学生信息存储到文件中。

源码:

import json
studentInfos = []

 #打印菜单
def printMenu():
   print("=" * 30)
   print("  学生管理系统")
   print("1.添加学生信息")
   print("2.删除学生信息")
   print("3.修改学生信息")
   print("4.显示所有学生信息")
   print("0.退出系统")
   print("=" * 30)

#添加学生信息
def addStudent():
   newName = input("请输入新的学生名字:")
   newSex = input("请输入新的学生性别(男/女):")
   newPhone = input("请输入新的学生电话:")
   newInfo = {}
   newInfo["name"] = newName
   newInfo["sex"] = newSex
   newInfo["phone"] = newPhone
   studentInfos.append(newInfo)

#删除学生信息
def delStudent(info):
   delNum = int(input("请输入要删除的序号:")) - 1
   del info[delNum]


#修改学生信息
def modifyStudent():
   studentId = int(input("请输入要修改的序号:")) - 1
   newName = input("请输入新的学生名字:")
   newSex = input("请输入新的学生性别(男/女):")
   newPhone = input("请输入新的学生电话:")
   newInfo = {}
   newInfo["name"] = newName
   newInfo["sex"] = newSex
   newInfo["phone"] = newPhone
   studentInfos[studentId] = newInfo

#查看所有学生信息
def showStudent():
   print("=" * 30)
   print("学生信息如下")
   print("=" * 30)
   print("序号    姓名    性别    手机号")
   num = 1
   for tempInfo in studentInfos:
      print(" %d   %s  %s   %s"%(num,tempInfo["name"],tempInfo["sex"],tempInfo["phone"]))
      num += 1

#main函数
def main():
   while 1 == 1:
      printMenu()
      key = int(input("请输入操作的序号:"))
      if key == 1:
         addStudent()

elif key == 2: delStudent(studentInfos) elif key == 3: modifyStudent() elif key == 4: showStudent() elif key == 0: exit = input("真的要退出系统吗?(Yes or No):") if exit == "Yes": with open("info.txt","w+") as f: jsObj = json.dumps(studentInfos) f.writelines(jsObj) break elif exit == "No": pass else: print("输入有误,请重新输入") else: print("输入有误,请重新输入") main()

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 实验四 Python函数编程实验

    函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段,它能够提高应用的模块性和代码的重复利用率。Python定义函数使用def关键字,格式如下:

    背雷管的小青年
  • 实验三 序列数据处理程序设计

    2、掌握字符串的输入和输出,会使用切片的方式访问字符串中的值,掌握常见的字符串的内建函数。

    背雷管的小青年
  • Python杂谈(4)—— 简述函数式编程

    背雷管的小青年
  • python——内置函数和匿名函数

    内置函数 接下来,我们就一起来看看python里的内置函数。截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是pytho...

    用户1214487
  • Redis 中的数据持久化策略(AOF)

    上一篇文章,我们讲的是 Redis 的一种基于内存快照的持久化存储策略 RDB,本质上他就是让 redis fork 出一个子进程遍历我们所有数据库中的字典,进...

    Single
  • Python3学习笔记 | 十七、Python的语句与语法-文档

    在之前章节中,介绍的一些方法等,都是不全的。对于一个类型,有多少个方法、或者参数、属性等,需要查看文档。下面介绍Python里几种文档形式。

    TeamsSix
  • redis 学习(18)-- AOF

    含义:每秒将数据从缓冲区刷到磁盘中,可能会丢失一秒的数据(redis 默认使用该策略)

    希希里之海
  • 小朋友学Python(7):输入与输出

    一、print与input print "a =", a = input() print "b =" b = input() print "c =", c = ...

    海天一树
  • Python模块化编程-内置函数#学习猿地

    > 内置函数就是在系统安装完python解释器时,由python解释器给提供好的函数

    学习猿地
  • Python模块化编程-内置函数#学习猿地

    > 内置函数就是在系统安装完python解释器时,由python解释器给提供好的函数

    学习猿地

扫码关注云+社区

领取腾讯云代金券