python查漏补缺 --- 模块、文件、异常
有些知识学着学着就忘了,有些博客看着看着就想留言了,本片博客仅代表作者本人的观点,如有错误及疑问,欢迎提出宝贵的意见!
1、方法定义好之后,如,def test(x) : ,此时将方法名赋值给一个新的变量,那么该变量等同于方法,可以具备test方法内部的全部功能
2、导包的时候,可以使用as关键字在不同的名称下导入模块或对象,这主要是在模块或对象具有冗长或混淆的名称时使用
3、python中主要有三种模块
a.自定义的类和方法
b.外部源安装的(第三方)
c.python预安装的(也称作标准库,python具有广泛的标准库是它作为语言的主要优点之一,这些标准库有些是python写的,有些是C语言写的,多数都可以在所有平台上使用)
4、许多第三方python模块存储在python包索引上(PyPi)。好的安装方法是使用pip安装管理工具,默认情况下,它是用python的现代化发行版安装的。
5、Python常用库
爬虫:Scrapy(举世闻名,分布式爬虫框架,不仅仅是简单的库)、beautifulsoup4、urllib、urllib2、selenium等。
机器学习:scikit-learn(灰常牛逼的一个库,几乎所有机器学习算法都囊括了应该),NLTK(自然语言处理工具包 )等(用一个等的原因是,说起来除了scikit-learn,我还真不知道还有啥,hhh)。
网站:Django(重量级网页框架)、Flask(轻量级网页框架)等。
数据处理科学计算:Numpy(数组矩阵神器)、Scipy(科学计算神器)、Pandas(熊猫包,R语言玩家转Python的最爱)等。
可视化:matplotlib(matlab风格式的包)、seaborn(散点图矩阵神器)、ggplot(R语言可视化神器的Python版本)、plotly(这个神器是个js库,不过也有各种流行的语言接口)等。
地学相关:basemap(画地图的库)、cartopy(画地图的库)、Folium(leaflet的Python版本 )、GDAL(开源GIS库)、geocoder(地理编码神器)、geopandas(地理数据的熊猫包)、geopy(还没玩过)、PySAL(空间计量经济学的一个神包)等(跟地学相关的包实在太多,后面有空的话,考虑会重点介绍几个包)。
6、Conda和pip不是竞争对手,而是侧重于不同用户组和使用模式的工具。Conda是一个通用的包管理器,当初设计来管理任何语言的包。所以用来管理python包当然也是绰绰有余,Conda 和 pip 目标并不相同, 只有小部分子集有交集有竞争关系:比如python包的安装和环境隔离。pip可以允许你在任何环境中安装python包,而conda允许你在conda环境中安装任何语言包(包括c语言或者python)。
7、python中常见的几个异常信息:
ImportError:导入失败
IndexError:一个列表用一个超出范围的数字索引
NameError:使用未知变量
SyTraceError:无法正常解析代码
TypeError:在不适当类型的值上调用函数
ValueError:值报错
8、try...except...finally
finally语句中的代码,即使在前面一个块中为发生异常时也会运行
9、文件IO
open函数的参数是文件的路径,如果文件在程序的当前工作目录中,则只能指定其名称
函数可以通过第二个参数指定用于打开文件的模式(第二个参数详见文章末尾):
1 open( ' filename.txt ' , ' r ' ) #只读模式,也是默认模式
2 open( ' filename.txt ' , ' w ' ) #只写模式,用于重写文件的内容,如果文件不存在,会创建
3 open( ' filename.txt ' , ' a ' ) #追加模式,将新内容添加到文件的末尾
4 open( ' filename.txt ' , ' wb ' ) #以二进制的形式写入文件,用于非文本文件(如图像和声音文件)
10、在读取文件中的所有内容之后,任何试图从该文件中读取的内容都会返回一个空字符串,因为您正在尝试从文件中的末尾读取:
1 file = open( "filename.txt " , "r")
2 file.read()
3 print("first-reading")
4 print(file.read())
5 print("finished")
6 file.close()
7
8
9 结果:
10 first-reading
11
12 finished
细心的小伙伴都会发现,这里存在两个file.read(),第一个读取,但是没有打印,第二个读取,才打印出来,根据读取的机制而言,第二次是在第一次读取的基础上继续读取的,第一次读取了全部的内容,Python把内容读到内存,那么第二次读取到的内容只能是空,所以打印出一个空的字符串。
11、当使用文件后,总是用close关闭是一种好的习惯,文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的,所以通常会和 try and finally 结合使用,确保文件始终关闭,即使发生错误。
1 try:
2 f = open("filename.txt")
3 print(f.read ( ) )
4 finally:
5 f.close()
12、每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
with open("filename.txt") as f:
print(f.read())
这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
13、调用read()会一次性读取文件的全部内容,如果文件有20G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
14、可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:
with open('E:\python\python\test.txt', 'w') as f:
f.write('Hello, python!')
15、要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码
要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:
f = open('E:\python\python\gbk.txt', 'r', encoding='gbk')
f.read()
16、遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open('E:\python\python\gbk.txt', 'r', encoding='gbk', errors='ignore')
17、总结:以后读写文件尽量使用with open语句,少使用f = open()语句
18、对于多个文件的读写,可以写成以下两种方式:
# 第一种方式
with open('C:\Desktop\text.txt','r') as f: with open('C:\Desktop\text1.txt','r') as f1: with open('C:\Desktop\text2.txt','r') as f2 ........ ........ .......
with open(''C:\Desktop\text.txt','r') as f:
........
with open(''C:\Desktop\text1.txt','r') as f1:
........
with open('C:\Desktop\text2.txt','r') as f2:
19、file属性:
20、附录
部分文字摘录:https://blog.csdn.net/ESA_DSQ/article/details/78663130