文件迭代器,用for循环的方法
文件上下文管理器
Python默认读取的都是文本文件。要是想要读取二进制文件,需要把刚刚的’r’改成’rb’.
简单说就是,任何非标准的文本文件(对于Py2来说,标准是ASCII,对于Py3来说,标准是unicode),你就需要用二进制读入这个文件,然后再用 .decode(’…’)的方法来解码这个二进制文件:
在图形界面的操作系统下,这个很简单,就是右键/拖拽 等等。
但是在Python的代码内该怎么做呢?
用Python内置的os模块直接调用操作系统提供的接口函数:
这里是通过OS告诉我们 我的操作系统的名字。 如果是posix,说明系统是#nix族,如果是nt,就是Windows
我们可以调用uname()来看看具体信息
查看、创建和删除目录可以这么调用:
文件重命名:
删除文件
尴尬的是。。复制文件并不存在于os里。。(⊙﹏⊙)b
原因是复制这个操作,不是由操作系统提供的系统调用。
我们可以用上面的代码,读入一个文件,再写入一个文件,来达到复制的目的。
当然,Python作为一个Glue Language的调性,总有第三方库来帮我们stay lazy:
Shutil就是其中一个。基本上可以看做是os的补充。它提供copyfile()方法,来复制你的文件:
这个库用起来比os爽很多。你们可以自己百度一下。看看文档。比较简单易用
小例子:
通过我们之前提过的方法,我们来看看怎么完成如下任务:
列出当前目录下的所有目录:
只想列出.py文件:
什么是序列化?
程序运行的过程中,所有变量都是在内存中操作的,当程序一旦执行完毕,结束退出后,变量占有的内存就被操作系统回收了。 因此我们需要将某些数据持久化存储到磁盘中,下次运行的时候从磁盘中读取相关数据。
我们将变量从内存中变成可以存储或传输的过程称之为序列化,在Python中叫做pickling,在其它语言中也称之为 serialization、marshaling、flattening等等,说的都是一个意思。 反之,则为反序列化,称之为unpickling,把变量内容从序列化的对象重新读取到内存中。
就是把刚刚的搞成的“序列化”的码,转成python看得懂的object
稍微注意一下,python2和python3里面的pickle不一样。
为了保证2,3的和谐,你可以用这个方法来保证你import正确:
同时,也许你们也会发现,这个pickle完的东西,是让人看不懂的。只有python自己可以把它unpickle回来。
如果我们有一个文件现在存下来,并且日后要在其他地方用到的话,
我们可以用JSON来做序列化。Python的数据结构跟Json有非常完美的兼容:
JSON类型
Python类型
{}
dict
[]
list
“string”
‘str’或者u’unicode’
1234.56
int或float
true/false
True/False
null
None
如果你有一个比较结构化的数据想要序列化,并且想要别的地方别的语言也能看得懂。那么你可以用JSON来做:
可以把别的函数作为参数传入的函数叫高阶函数。
举个例子:求绝对值的函数 abs()
如果只写abs我们得到是它是一个叫abs的函数
看,现在f有了abs的功能!既然如此,我们知道,函数本身就是可以作为一个变量。那我们的变量是可以作为另一个函数的参数的,那么一个函数也可以作为另一个函数的参数。
我们来看一个简单的高阶函数:
当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs:
python 使用 lambda 来创建匿名函数。
Lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,…argn]]:expression
比如,我写个相加函数:
楼上这个,实际上就是一个函数:
除了Lambda本身,Python还提供了其他几个辅助工具,让你的函数式代码块更加牛逼:
reduce
Python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(列表,元组等)中的所有数据进行如下操作:传给reduce中的函数func() (必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
顾名思义,reduce就是要把一个list给缩成一个值。所以你必须用二元操作函数。
map
map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
格式:map(func, seq1[, seq2…] )
Python函数式编程中的map()函数是将func作用于seq中的每一个元素,并用一个列表给出返回值。
map可以使用任何的lambda函数操作,本质上是把原有的list根据lambda法则变成另外一个list
filter filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。 和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
语法
filter(func, seq)
熟练运用以上三个玩意儿,你就可以一行写出几乎所有的复杂计算了。
装饰器就是函数的『包装』:
我们来看一个代码:
你可以看到如下的东西:
1)函数foo前面有个@hello的“注解”,hello就是我们前面定义的函数hello
2)在hello函数中,其需要一个fn的参数(这就用来做回调的函数)
3)hello函数中返回了一个inner函数wrapper,这个wrapper函数回调了传进来的fn,并在回调前后加了两条语句。
所以,本质上来讲,用@decorator来装饰某个函数时,其实是做了下面这件事儿:
再简单点说,就是把一个函数传到另外一个函数中,再调回给自己。
所以: ** hello(foo)返回了wrapper()函数,所以,foo其实变成了wrapper的一个变量,而后面的foo()执行其实变成了wrapper() ** 同理,我们也可以搞多个decorator:
你还可以给这个decorator带个参数:
好了,讲这么多比较复杂,我们来看个网页编程的case:
在上面这个例子中,我们可以看到:makeHtmlTag有两个参数。所以,为了让 hello = makeHtmlTag(arg1, arg2)(hello) 成功,makeHtmlTag 必需返回一个decorator(这就是为什么我们在makeHtmlTag中加入了real_decorator()的原因),这样一来,我们就可以进入到 decorator 的逻辑中去了—— decorator得返回一个wrapper,wrapper里回调hello。
这里插一个知识,我们看到parameters里面有个(*args, **kwargds),指的是: 一个星星,指的是这里可以随便放多少个参数,内部提及的时候,当做一个list看。 两个星星指的也是随便多少个参数,但是这里可以带上参数的名字,比如(x=‘1’, y=‘2’),内部提及的时候,当做一个dict看。
Decorator这个东西,也可以写成class样式:
这个class样式的看起来比函数样式看着清楚点儿,这样我们再把刚刚的网页编程那段改一下,就得到:
装饰器的副作用:
因为decorator的因素,我们原本的函数其实已经变成了一个叫wrapper函数。
比如,你再调用__name__的时候,他会告诉你,这是 wrapper, 而不是 foo 或者 hello。
当然,虽然功能效果不变,但是有些处女座的童鞋会觉得很不爽。
所以,Python 的 functool 包中提供了一个叫 wrap 的 decorator 来消除这样的副作用:
来个经典例子:
斐波那契数列递归法:
我们知道,这个递归是相当没有效率的,因为会重复调用。比如:我们要计算fib(5),于是其分解成fib(4) + fib(3),而fib(4)分解成fib(3)+fib(2),fib(3)又分解成fib(2)+fib(1)…… 你可看到,基本上来说,fib(3), fib(2), fib(1)在整个递归过程中被调用了两次。
而我们用decorator,在调用函数前查询一下缓存,如果没有才调用了,有了就从缓存中返回值。一下子,这个递归从二叉树式的递归成了线性的递归。
Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。
偏函数又可以翻译成部分函数,大概意思就是说,只设置一部分参数。
举个例子,我们知道int()可以把字符串变成十进制数字:
但int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换:
假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:
这样,我们转换二进制就非常方便了:
最后,创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数,当传入:
继续同理,我们可以用*把一个list塞进来
相当于:
注意,10在最左边。
今天的课程实践会结合上节课给你们的代码内容。
上节课我们讲了如果写个Dataset类来帮我们下载和处理数据。
这节课我们学习了文本的读入,那我们就来做做更加复杂的内容:
本节课的压缩包里有一个数据文件,是我们今天实战的数据。
这是美国亚利桑那州Pima印第安女人患有糖尿病状况的数据集(因为他们的得病率很高)。
这个数据是一个txt文件(其实是个csv),每一行就是一个数据条,长这样:
6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1
其中,前面N-1个数据,分别是一些身体的指标,比如:血压,血糖,身高,是否怀孕等等。 最后第N个数据点是记录她是否患有糖尿病,它只有0或者1两种可能。这也就是我们说的数据标签。
所以,这里我们脑海中应该浮现的数据结构如下:
x = [
[6,148,72,35,0,33.6,0.627,50],
[1,85,66,29,0,26.6,0.351,31],
[8,183,64,0,0,23.3,0.672,32],
y = [1,0,1,0,1,1,1,0,…]
所以,这是一个二元分类问题。
参照上一堂课的内容,我们要做如下的修改:
2.我们这次依旧是以0.7的比率分开训练集和测试集。当我们得到区分开的 x_train, x_test, y_train, y_test以后,我们把这些个数据分别用Json或者Pickle的方法序列化在我们文件夹内。然后我们新建一个程序,从中反序列化我们处理好的数据。并进行之后的Machine Learning过程。
3.当我们把一个model训练好以后,我们代入全部的x_test数据,并得到我们预测出来的分类值y_preds。我们把这个值(list)与我们的y_test相互比较,用一些正确率统计的方法计算我们model的准确率,并用lambda函数来实现
预测数据的直接准确率怎么计算?
准确率 = (对的数据数 / 全部数据数) * 100%
高级一点,
我们可以再实现一点其他准确率计算方式:
AUC,MSE,…
详情可见附录的cheat sheet,或者自行百度。
OK!
自己动手尝试一下吧!
么么哒!
美观性、风格化和可控性是时下流行的 文成图 面临的三座大山,所谓美观性,指的是符合美学规则,不能有脸部畸变、 手指扭曲等瑕疵;所谓风格化,指的是能生成动漫、二次元等多种多样的风格;所谓可控性,指的是可以自由的控制生成图片中人物的性别、年龄、质态、种族、服装以及场景、光线等的能力. SDXL在图像生成的精细度、真实性、提示词忠实度和准确性上都有显著的提高,而且再也不需要冗长的咒语才能生成差强人意的图
Python 是一种广泛使用的高级编程语言,以其简洁易懂的语法和强大的功能而闻名。无论你是编程新手还是有经验的开发者,Python 都能帮助你快速实现想法并解决问题。本文将带你从 Python 的基础知识入手,逐步深入到高级应用,帮助你全面掌握 Python 编程。1. Python 简介Python 由 Guido van Rossum 于 1991 年首次发布,作为一种通用编程语言,Pytho
摘要本文旨在为初学者提供一个清晰、系统的Python学习路径,同时为有经验的开发者提供一些高级主题和最佳实践。我们将涵盖Python的基础语法、常用数据结构、面向对象编程以及一些高级特性如并发处理、网络编程等。通过具体的代码示例和项目实战,帮助读者更好地理解和应用Python编程。目录Python简介与环境搭建基础语法与控制结构数据类型与操作面向对象编程(OOP)文件操作与异常处理并发与并行编程网
# 从入门到精通 Python 第三版电子版实现指南作为一名新手开发者,掌握Python及其应用是您职业生涯的一个重要步骤。在这篇文章中,我将引导您完成《Python从入门到精通第三版》电子版的实现流程,包括必要的步骤及其所需的代码。整个过程将分为几个步骤,每一步我都会详细说明。## 流程概述以下是实现该电子版的基本步骤:| 步骤 | 描述
# Python编程基础Python是一种广泛使用的高级编程语言,以其简洁的语法和强大的功能被许多开发者所青睐。它适合各种项目,从数据分析到网络开发,再到机器学习。本文将介绍Python的基本概念,并通过一些代码示例帮助理解。## Python环境设置在开始编程之前,你需要安装Python。可以从[Python官方网站]( `python --version` 来检查Python是否安
# Python编程从入门到精通第三版答案的实现指南欢迎加入Python编程的世界!本文将为你提供一份详细的指南,帮助你实现“Python编程从入门到精通第三版”中的任务和代码。本指南包括任务流程、每一步的详细说明及代码示例。## 整体流程首先,我们来看看整个实现的流程。我们可以用如下表格来展示步骤:```markdown| 步骤 | 描述
# 如何实现“Python编程从入门到精通第三版电子书”在这个数字化阅读的时代,学习编程尤其是Python编程变得越来越普遍。作为一名初学者,很多人可能会想要获取一些好的学习材料,例如“Python编程从入门到精通第三版电子书”。在这篇文章中,我将会教你如何获取并组织这本书的学习内容,帮助你入门并逐步掌握Python编程。## 流程概述首先,我们需要明白整个学习的流程。下面是一个简单的
# Python从入门到精通:探索编程的无限可能Python作为一种简单易学的编程语言,广泛应用于数据分析、机器学习、网站开发等多个领域。本篇文章旨在为初学者提供一个关于Python基础知识的培训,同时涵盖一些实际应用的示例。我们还将使用甘特图和序列图来帮助理解项目管理和程序执行流程。## 1. Python基础知识在开始之前,我们可以先了解一下Python的基本数据类型和控制结构。
# Python 数据结构与算法入门在学习计算机科学的过程中,数据结构和算法是两个至关重要的核心概念。我们可以通过不同的数据结构来高效地存储和管理数据,而算法则是针对特定问题的解决方案。本文将通过示例代码、序列图和状态图来深入探讨这两个主题。## 数据结构的种类在 Python 中,常用的数据结构包括列表、元组、集合和字典。其中,列表和字典是最为常用的,它们具有灵活性和优秀的性能。下面
文章目录1. 常用的有6种(数据)的类型2. 注释3.变量4. 数据类型与转换4.1 初始阶段数据类型4.2 数据类型转换5. 标识符5.1 命名规则6. 运算符6.1 算术运算符6.2 (复合)赋值运算符7. 字符串拼接7.1 +号拼接7.2 通过占位与精度控制拼接(%)7.3 拼接快速写法8. 数据输入(input) 1. 常用的有6种(数据)的类型类型描述说明数字(Number)支持整数(
第1章 Java语言概述1.1 Java语言的诞生1.2 学习Java的必要性1.3 Java的特点1.4 Java与C/C++之关系1.5 Java运行平台1.6 Java程序开发1.7 JDK 1.6编译器的兼容性问答题作业题第2章 基本数据类型和数组2.1 标识符和关键字2.2 基本数据类型2.3 基本数据类型的转换2.4 数据的输入和输出2.5 数组问答题作业题第3章 运算符、表达式和语句
原标题:Python3入门到精通实战特训随着时间的推移,python2.7版本很快就要停止官方更新了。如果你还没来及正式考虑版本迁移问题,或者你是一个python新手。那么就很有必要一试本课程,一方面可以学习python3的新特性与python的核心功能,一方面了解python版本迁移的方式,最后还可以学习python高性能开发建议和python的应用案例。本课程主要面向有一定python基础的学
本期活动,不仅有赠书福利,且有购书福利,图灵公司联合当当网特意为{印象python}读者们申请了一波购书福利。感兴趣的读者朋友,请下拉至文末,领取福利!今天是咱们程序媛/猿的节日,为大家搞到一波硬核福利!之前要求我推书的小伙伴今天不光有优秀的书籍,还有超值的折扣!今天1024统统给你!Python编程入门《Python编程:从入门到实践》 真正零基础python入门教材"蟒蛇书"——Full Ci
3-1 姓名 将一些朋友的姓名存储在一个列表中,并将其命名为names 。依次访问该列表中的每个元素,从而将每个朋友的姓名打印出来。names = ['hhh','aaa','bbb']for name in names: print(name)3-2 问候语 继续使用练习3-1中的列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。for
Python 3.6零基础入门与实战 作者:王启明,罗从良Python 3.6零基础入门与实战 出版社: 清华大学出版社Python 3.6零基础入门与实战 内容简介随着大数据技术的发展及Python在人工智能领域的火热应用,Python得到越来越多的应用。本书就是在这个背景下编写的,是一本Python 3.6入门教材,特别适合想直接切入爬虫编程及大数据分析处理的读者学习使用。本书分为16章,主要
文章目录前言3-43-53-63-7 前言Python初学者一枚,本文仅为个人学习记录,便于以后查看使用。3-4嘉宾名单:如果你可以邀请任何人一起共进晚餐(无论是在世的还是故去的),你会邀请哪些人?请创建一个列表,其中包含至少 3 个你想邀请的人;然后,使用这个列表打印消息,邀请这些人来与你共进晚餐。输入:# Method 1invite_list = ['Edward Elric', 'Al
Course List: Windows搭建python开发环境,python入门到精通[一] Python基本语法,python入门到精通[二] visual studio 2015 搭建python开发环境,python入门到精通[三] Python基本语法[二],python入门到精通[四] Python运算符,python入门到精通[五] Python开发Mon
# 2-1 简单消息: 将一条消息存储到变量中, 再将其打印出来。var = 'hello_world!'print(var)# 2-2 多条简单消息: 将一条消息存储到变量中,将其打印出来; # 再将变量的值修改为一条新消息, 并将其打印出来。var = 'hello_world!'print(var)var = 'hello_python!'print(var)# 2-3
Python编程从入门到实践日记Day1第1章 变量和简单数据类型(一)Hello World程序长期以来,编程界都认为刚接触一门新语言时,如果首先使用它来编写一个在屏幕上显示消息“Hello World!”的程序,将给你带来好运。要使用Python来编写这种Hello World程序,只需一行代码:print("hello world!")这种程序虽然简单,却有其用途:如果它能够在你的系统上正确
第一本java学习书——《java从入门到精通》(第3版),明日科技编著。第1篇 基础知识第1章 初识javajava是一种面向对象的计算机语言。 java分为Java SE、Java EE、Java ME 三个版本。 学好java的方法;多实践、多思考、多学习。 java API文档;即java开发类集合。 java语言特性;简单、面向对象、分布性、可移植
以下是当前热门编程语言的排名及开源贡献比例表格(数据截至2025年10月):排名语言流行度(TIOBE)开源贡献比例开源生态说明1Python25.98%95%+PyPy优化、AI框架社区驱动,87%的AI模型依赖开源库(如TensorFlow/PyTorch)2JavaScript3.22%90% ...
1. AHB仲裁器信号: 2. 仲裁过程包括四个基本步骤: 1.主设备使用HBuSREQx信号请求访问总线; 2.仲裁器置位相应的HGRATx信号,表示主设备的申请已成功,它将在当前传输完成时获得总线访问权; 3.主设备拥有地址/控制总线; 4.主设备拥有数据总线。 3. 请求总线访问 1. master使用HBUSREQx想arb
1.数据类型 c语言自带的一些数据类型 char //字符型 1byte short //短整型 2byte int //整型 4byte long //长整型 4 or 8byte long long //更长的整型 8byte float //单精度浮点数 4byte double //双精度浮 ...