百度飞桨领航团零基础Python速成营 课程总结6

百度飞桨领航团零基础Python速成营 课程总结6,第1张

概述百度飞桨领航团零基础Python速成营课程总结6课程链接https://aistudio.baidu.com/aistudio/course/introduce/7073飞桨官网https://www.paddlepaddle.org.cn/推荐学习网站https://www.runoob.com/python3/python3-tutorial.html目录文件处理模型文件常用函数JSON(J 百度飞桨领航团零基础Python速成营 课程总结6

课程链接 https://aistudio.baIDu.com/aistudio/course/introduce/7073
飞桨官网 https://www.paddlepaddle.org.cn/
推荐学习网站 https://www.runoob.com/python3/python3-tutorial.HTML


目录文件处理模型文件常用函数JSON(JavaScript Object Notation)OS文件/目录多线程作业六:大作业课节6:文件 *** 作及常用模块使用

输入,处理,输出。

输入:读取4个队员的训练数据,读取4个文件

james.txt 2-34,3:21,2,34,2.45,3.01,2:01,2:01,3:10,2-22Sarah.txt 2:58,2.58,2:39,2-25,2:55,2:54,2.18,2:55,2:55julIE.txt 2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21mikey.txt 2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38

处理:标准化数据,切分数据,top3(最快的3个时间)

输出:将每个人的信息打印在屏幕上显示

文件处理模型
# 读取每行数据f = open('work/train_data_cor.txt')for line in f:    print(line)f.close()

输出:

james,2004-5-21,2.34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22julIE,2006-5-9,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21Sarah,2004-3-8,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55mikey,2003-9-10,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38

例1. 数据出现问题

f = open('work/train_data_wrg.txt')for line in f:    data = line.strip().split(',')    print('姓名:'+data.pop(0)+'生日:'+data.pop(0)+'时间:'+str(data))f.close()

输出:

recent call last)<ipython-input-4-a51a9349f79f> in <module>      3     data = line.strip().split(',')      4 ----> 5     print('姓名:'+data.pop(0)+'生日:'+data.pop(0)+'时间:'+str(data))      6 f.close()IndexError: pop from empty List

解决方法:
1.使用异常

#使用异常with open('work/train_data_wrg.txt') as f:    for line in f:        data = line.strip().split(',')        try:            print('姓名:'+data.pop(0)+'生日:'+data.pop(0)+'时间:'+str(data))        except:            pass

2.代码判断

#代码判断with open('work/train_data_wrg.txt') as f:    for line in f:        data = line.strip().split(',')        if len(data) != 1:            print('姓名:'+data.pop(0)+'生日:'+data.pop(0)+'时间:'+str(data))

正确输出:

姓名:james生日:2004-5-21时间:['2.34', '3:21', '2.34', '2.45', '3.01', '2:01', '2:01', '3:10', '2-22']姓名:julIE生日:2006-5-9时间:['2.59', '2.11', '2:11', '2:23', '3-10', '2-23', '3:10', '3.21', '3-21']姓名:Sarah生日:2004-3-8时间:['2:58', '2.58', '2:39', '2-25', '2-55', '2:54', '2.18', '2:55', '2:55']姓名:mikey生日:2003-9-10时间:['2:22', '3.01', '3:01', '3.02', '3:02', '3.02', '3:22', '2.49', '2:38']
文件常用函数

文件打开关闭:

open() 函数:打开文件。file object = open(file_name [, access_mode][, buffering])close() 函数:关闭文件。fileObject.close()

文件读写

read() 函数:用于从文件读取指定的字节数。fileObject.read([size])
参数size:从文件中读取的字节数,默认为 -1,表示读取整个文件。readline() 函数:用于从文件读取整行,包括 “\n” 字符。fileObject.readline(size)write() 函数:将任何字符串写入一个打开的文件。fileObject.write(string)

文件定位:

seek() 函数:用于移动文件读取指针到指定位置。fileObject.seek(offset[, whence])
参数offset:开始的偏移量,也就是代表需要移动偏移的字节数。whence:可选,默认值为 0。表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。tell() 函数: 返回文件的当前位置,即文件指针当前位置。fileObject.tell()JsON(JavaScript Object Notation)

导入 Json 库:import Json
Json()函数:

Json.dumps 将 Python 对象编码成 JsON 字符串。Json.loads 将已编码的 JsON 字符串解码为 Python 对象。Json.dump 将数据写入Json文件中。Json.load 把文件打开,并把字符串变换为数据类型。不带s的用于 *** 作文件,带s的用于数据类型的转换。

表1. python 类型 Json 类型转化对照表

PythonJsON
dictobject
List, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull
# dumps,python字典转Json字符串import Jsonclass Athlete(Json.JsONEncoder):   def __init__(self,a_name,a_dob=None,a_times=[]):       self.name = a_name       self.dob = a_dob       self.times = a_times   def top3(self):       return sorted(set([self.sanitize(t) for t in self.times]))[0:3]   def sanitize(self,time_string):       if '-' in time_string:           splitter = '-'       elif ':' in time_string:           splitter = ':'       else:           return (time_string)       (mins,secs) = time_string.split(splitter)       return (mins+'.'+secs)with open('work/train_data_cor.txt') as f:   data = f.readline().strip().split(',')   ath = Athlete(data.pop(0),data.pop(0),data)   print(ath)   # dumps数据转化ath_Json = Json.dumps(ath.__dict__)# 字典print(ath.__dict__)# Json 字符串print(ath_Json)

输出:

<__main__.Athlete object at 0x7f19d5064dd0>{'name': 'james', 'dob': '2004-5-21', 'times': ['2.34', '3:21', '2.34', '2.45', '3.01', '2:01', '2:01', '3:10', '2-22']}{"name": "james", "dob": "2004-5-21", "times": ["2.34", "3:21", "2.34", "2.45", "3.01", "2:01", "2:01", "3:10", "2-22"]}
# dump,保存Json到文件with open('work/Json.txt','w') as f:   Json.dump(ath_Json,f)
# load,读取Json文件内容with open('work/Json.txt') as f:  ath = Json.load(f)  print(ath)

输出:

{"name": "james", "dob": "2004-5-21", "times": ["2.34", "3:21", "2.34", "2.45", "3.01", "2:01", "2:01", "3:10", "2-22"]}
OS文件/目录os.getcwd() 函数:用于返回当前工作目录。os.chdir() 函数:用于改变当前工作目录到指定的路径。os.chdir(path)os.mkdir() 函数:用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。os.mkdir(path[, mode])os.Listdir(path) 函数:返回path指定的文件夹包含的文件或文件夹的名字的列表。os.system() 函数:将字符串转化成命令在服务器上运行。
path模块:from pathlib import Pathos.path.abspath(path) 函数:返回绝对路径。os.path.exists(path) 函数:如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。os.path.dirname(path) 函数:返回文件路径。os.path.isdir(path) 函数:判断路径是否为目录。os.path.isfile(path) 函数:判断路径是否为文件。
import os#返回当前工作目录current_path = os.getcwd()print('当前路径:'+current_path)

输出:

当前路径:/home/aistudio
#改变当前工作目录os.chdir('/home/aistudio/work')#运行mkdir命令os.system('mkdir today')

输出:

0
from pathlib import Path#返回当前绝对路径abs_path = os.path.abspath('')print('abs_path:'+abs_path)#路径是否存在Path(abs_path).exists()

输出:

abs_path:/home/aistudio/workTrue
print('当前路径:'+os.getcwd())Listdir = os.Listdir()#返回当前路径下文件和文件夹名print(Listdir)

输出:

当前路径:/home/aistudio/work['Json.txt', 'train_data_cor.txt', 'athlete.py', 'data.txt', 'train_data_wrg.txt', 'today']
#是否为文件夹os.path.isdir('/home/aistudio/work/today')

输出:

True

例1. 输出路径下所有txt文件的文件名

 # 输出路径下所有txt文件的文件名import osdef recur(path):    Listdir = os.Listdir(path)    for name in Listdir:        next_path = path+'/'+name        if name[0] is '.' or name[0] is '_':            continue                if os.path.isfile(next_path) :            # print(next_path + '=====isfile')            temp = name.split('.')            (filename,filetype) = (temp.pop(0),temp.pop(0))            if filetype == 'txt':                target.append(name)        else:            recur(next_path)path = '/home/aistudio/work'target = []recur(path)print(target)

输出:

['loren.txt', 'Json.txt', 'train_data_cor.txt', 'data.txt', 'train_data_wrg.txt']
多线程线程模块:thread和threadingrun() 函数:不启动一个新线程,在主线程中调用了一个普通函数。start() 函数:启动一个子线程,线程名就是自己定义的name。join([time]): 等待至线程中止。

例1. 压缩文件:

#制造数据with open('work/loren.txt','w+') as f:  for i in range(50000):      f.write('loren,2011-11-3,270,3.59,4.11,3:11,3:23,4-10,3-23,4:10,4.21,4-21')      f.write('\n')
#使用进程的方式import zipfileprint('压缩作业开始了,请您耐心等待...')infile = 'work/loren.txt'outfile = 'work/myarchive.zip'f = zipfile.Zipfile(outfile, 'w', zipfile.ZIP_DEFLATED)f.write(infile)f.close()print('压缩作业结束了,请问还需要帮您做什么呢?')

输出:

压缩作业开始了,请您耐心等待...压缩作业结束了,请问还需要帮您做什么呢?
import threading, zipfileclass AsyncZip(threading.Thread): #继承父类threading.Thread  def __init__(self, infile, outfile):      threading.Thread.__init__(self)      self.infile = infile      self.outfile = outfile  def run(self): #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数      f = zipfile.Zipfile(self.outfile, 'w', zipfile.ZIP_DEFLATED)      f.write(self.infile)      f.close()      print('压缩完成,您要的文件在:', self.outfile)background = AsyncZip('work/loren.txt', 'work/myarchive.zip') # 创建新线程print('压缩作业开始了,请您耐心等待...')background.start() # 开启线程print('我正在为您压缩,请问还需要帮您做什么呢?')background.join()

输出:

压缩作业开始了,请您耐心等待...我正在为您压缩,请问还需要帮您做什么呢?压缩完成,您要的文件在: work/myarchive.zip
作业六:大作业

作业内容:

第一题

数据如下:

stu1.txt 孙同学,2020-5-21,20,‘男’,77,56,77,76,92,58,-91,84,69,-91
stu2.txt 赵同学,2020-11-3,24,‘女’,65,68,72,95,-81,71,86,91,57,91
stu3.txt 王同学,2021-8-7,25,‘男’,87,78,90,-76,88,47,100,65,69,100
stu4.txt 李同学,2021-8-10,29,‘男’,92,54,85,71,-91,68,77,68,95,95
以上四个txt文档在work路径下可以找到。

定义Student类,包括name、dob、age、gender和score属性,包括top3方法用来返回学生的最大的3个成绩(可重复)、sanitize方法用来将负的分数变为正的分数,负的分数可能是输入错误。声明stu_List对象组数用于存储所有的学生对象。最后输出所有的学生信息包括姓名、生日、年龄、性别、最高的3个分数。

第一题的输出结果如下,供参考:
!输出参考结果

# 定义类class Student():    def __init__(self, name, dob, age, gender, score=[]):        self.name = name        self.dob = dob        self.age = age        self.gender = gender        self.score = score    def __str__(self):        return "姓名:%s  生日:%s 年龄: %s 性别: %s 分数:%s"%(self.name,self.dob,self.age,self.gender,self.top3())    def top3(self):        return sorted([self.sanitize(s) for s in self.score])[-3:]    def sanitize(self,s):        abs(s)        return (s)             # 读取文件def readfile(Path):    with open(Path) as f:        for line in f:            data = line.strip().split(',')            return data# 列表初始化pathList = ['work/stu1.txt', 'work/stu2.txt', 'work/stu3.txt', 'work/stu4.txt']stu_List = []# 读入创建对象for i in pathList:    res = readfile(i)    stu_List.append(Student(res[0],res[1],res[2],res[3],[int(i) for i in res[4:]]))for i in stu_List:    print(i)

输出:

姓名:孙同学  生日:2020-5-21 年龄: 20 性别: '男' 分数:[77, 84, 92]姓名:赵同学  生日:2020-11-3 年龄: 24 性别: '女' 分数:[91, 91, 95]姓名:王同学  生日:2021-8-7 年龄: 25 性别: '男' 分数:[90, 100, 100]姓名:李同学  生日:2021-8-10 年龄: 29 性别: '男' 分数:[92, 95, 95]
第二题

数据格式如下:

stu5.txt 特长同学,2020-10-5,20,‘男’,180,87,98,77,76,92,58,-76,84,69,-47
stu6.txt 特长同学,2020-10-6,20,‘女’,230,76,48,82,88,92,58,-91,84,69,-68
以上两个txt文档在work路径下可以找到。

定义Spostudent、Artstudent为Student的子类,在子类的属性里面新增了spe为特长分数。Spostudent包括的top3方法返回的是最低的3个得分(可重复),Artstudent包括top3方法返回的是最高的3个得分(可重复),最后使用多态的方式输出2个特长同学的姓名、生日、年龄、性别、分数、特长分。

第二题的输出结果如下,供参考:
!输出参考结果

# 继承class Spostudent(Student):    def __init__(self,name,dob,age,gender,spe,score=[]):        self.spe = spe        Student.__init__(self,name,dob,age,gender,score)    def __str__(self):        return "姓名:%s  生日:%s 年龄: %s 性别: %s 分数:%s 特长分:%s"%(self.name,self.dob,self.age,self.gender,self.top3(), self.spe)        def top3(self):        return sorted([self.sanitize(s) for s in self.score])[0:3]        class Artstudent(Student):    def __init__(self,name,dob,age,gender,spe,score=[]):        self.spe = spe        Student.__init__(self,name,dob,age,gender,score)            def __str__(self):        return "姓名:%s  生日:%s 年龄: %s 性别: %s 分数:%s 特长分:%s"%(self.name,self.dob,self.age,self.gender,self.top3(), self.spe)    # 最高的3个得分    def top3(self):        return sorted([self.sanitize(s) for s in self.score])[-3:]spo = 'work/stu5.txt'art = 'work/stu6.txt'# 读取对象res = readfile(spo)spo = Spostudent(res[0],res[1],res[2],res[3],res[4],[int(i) for i in res[5:]])print(spo)res = readfile(art)art = Artstudent(res[0],res[1],res[2],res[3],res[4],[int(i) for i in res[5:]])print(art) 

输出:

姓名:特长同学  生日:2020-10-5 年龄: 20 性别: '男' 分数:[-91, -91, 56] 特长分:180姓名:特长同学  生日:2020-10-6 年龄: 20 性别: '女' 分数:[77, 84, 92] 特长分:230

sanitize(s) for s in self.score])[-3:]
spo = ‘work/stu5.txt’
art = ‘work/stu6.txt’

读取对象

res = readfile(spo)
spo = Spostudent(res[0],res[1],res[2],res[3],res[4],[int(i) for i in res[5:]])
print(spo)
res = readfile(art)
art = Artstudent(res[0],res[1],res[2],res[3],res[4],[int(i) for i in res[5:]])
print(art)

输出:

姓名:特长同学 生日:2020-10-5 年龄: 20 性别: ‘男’ 分数:[-91, -91, 56] 特长分:180
姓名:特长同学 生日:2020-10-6 年龄: 20 性别: ‘女’ 分数:[77, 84, 92] 特长分:230

总结

以上是内存溢出为你收集整理的百度飞桨领航团零基础Python速成营 课程总结6全部内容,希望文章能够帮你解决百度飞桨领航团零基础Python速成营 课程总结6所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1188993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存