Python文件操作,掌握文件的不同操作,熟悉闭包、装饰器和内置函数的使用。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文章来自腾讯云 作者:背雷管的小青年

私信小编回复01可领取学习资料以及学习视频

一、实验目的与要求

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分析程序运行结果:阅读下面的程序,分析代码是否能够编译通过。如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验题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()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容