1. file
Python使用open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。使用 open() 方法一定要保证关闭文件对象,即调用close() 方法。或使用with open():
open(‘data_dir/file_name’, mode='r') # 至少需要文件路径(相对或者绝对路径)和打开模式两个参数
with open('file','r') as f:
f.readline() # 读入第一行数据,返回str类型
f.read() # 读入所有数据,返回str类型
f.readlines() # 读入所有数据(会连同换行符一起存到一个列表中)
2. os模块
os模块用于处理文件和目录
常用函数:
os.chdir(path) # 改变当前工作目录
os.chroot(path) # 改变当前进程的根目录
os.chmod(path, mode) # 更改权限
os.listdir(path) # 返回path指定的文件夹包含的文件或文件夹的名字的列表
os.mkdir(path[, mode]) # 以mode模式创建一个名为path的文件夹
os.mkfifo(path[, mode]) # 重命名
os.remove(path) # 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError
os.removedirs(path) # 递归删除目录
os.write(fil_name,content) # 将内容写入文件,返回写入内容的位数
3. datetime模块
Python中的时间模块,除了datetime还有time,calendar,dateutil,pytz等
time和datetime区别 参考 可以把datetime看做time的升级版,可以对date(日期)、time(时间)、datetime(日期时间)单独管理。
# 主要类类
tzinfo # 时区相关
datetime.date # 日期
datetime.time # 时间
datetime.datetime # 日期和时间
datetime.timedelta # 时间跨度运算
# 常用函数
4. 类和对象
面向对象的思想不是python特有的,一些概念这里就略过了。直接上代码
4.1 类定义和实例化
# 使用class关键字创建一个最简单的类
class Student:
stuCount = 0 # 类变量 值会被所有实例共享
def __init__(self, name, salary): # 初始化函数/构造函数
#self 代表类的实例,在定义类的方法时必须有,虽然在调用时不必传入相应的参数
self.name = name
self.age= age
Student.stuCount += 1
def printInfo(self): # 类方法
print("Student Name:{}, Age:{}".format(self.name, self.age))
# 实例化对象
stu = Student('Zyn', 20)
stu.printInfo() # =>Student Name:Zyn, Age:1
# 对象可以直接添加,删除,修改属性
stu.major = 'CS'
stu.age = 10
del stu.age
4.2 内置类属性
__dict__ # 类的属性(包含一个字典,由类的数据属性组成)
__doc__ # 类的文档字符串
__name__ # 类名
__module__# 类定义所在的模块
__bases__ # 类的所有父类构成元素(包含了一个由所有父类组成的元组)
4.3 继承
# 直接用了菜鸟的示例
class Parent: # 定义父类
parentAttr = 100
def __init__(self):
print "调用父类构造函数"
def parentMethod(self):
print '调用父类方法'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "父类属性 :", Parent.parentAttr
class Child(Parent): # 定义子类
def __init__(self):
print "调用子类构造方法"
def childMethod(self):
print '调用子类方法'
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值
4.4 重写和重载
关于这两个概念,当年学C++的时候学了一遍,学Java时学了一遍,现在又学习了一遍2333
重写:子类继承父类后需要同名的不同功能的函数,即可重写同名方法
class Parent: # 定义父类
def myMethod(self):
print '调用父类方法'
class Child(Parent): # 定义子类
def myMethod(self):
print '调用子类方法'
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
重载:函数或者方法有相同的名称,但是参数列表不相同(类型不同,数量不同,位置不同)。但是在Python的呈现使用中不存在重载的概念(*arg和**kwargs的存在)。
4.5 类的属性和方法
两侧双下划线定义的是特殊方法,一般是系统定义名字,e.g.init()
单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问,在类内部的方法中使用时 self.__ParamName
类私有方法:与私有属性类似,双下划线开头,不能在类外部访问,必须包含self参数,且为第一个参数。在类内调用self.__MethodName
# 实例化的类不能访问私有数据,但可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性
class Runoob:
__site = "www.runoob.com"
runoob = Runoob()
print(runoob._Runoob__site) # =>www.runoob.com
5. 正则表达式
正则表达式是一个特殊的字符序列,能帮助方便的检查一个字符串是否与某种模式匹配。在爬虫还有文本数据清洗时用得比较多。Python中通过调用re这个模块实现正则表达功能。
一个练习正则的网站RegexGolf
网上大神给出的参考答案
6. re模块
# 从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话就返回none
re.match(pattern, string, flags=0)
# pattern:匹配的正则表达式 string:要匹配的字符串
# flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
# 扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
# 检索和替换
re.sub(pattern, repl, string, count=0, flags=0)
# 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表
findall(string[, pos[, endpos]])
# 按照能够匹配的子串将字符串分割后返回列表
re.split(pattern, string[, maxsplit=0, flags=0])
7. http请求
之前没有涉及过网络编程这一块,正好为学习爬虫打个基础。
首先是安装推荐比较多的requests库,貌似anaconda已经自带了。
HTTP有多种请求方法
import requests
# 发送get请求
url = 'https://www.csdn.net/'
requests = requests.get(url)
print(requests.content) # 返回字节形式
# 发送post请求
url = 'https://xxxxx.com/login'
postdatas = {'key': 'value'}
requests = requests.post(url, data=postdatas)
print(requests.content) # 返回字节形式
# put、delete、head、optiions请求
r = requests.put('https://www.csdn.net/put', data = {'key':'value'})
r = requests.delete('https://www.csdn.net/delete')
r = requests.head('https://www.csdn.net/get')
r = requests.options('https://www.csdn.net/get')
2、URL参数
URL 的查询字符串(query string)传递某种数据。如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如,csdn.net/get?key=val。
requests 允许使用 params 关键字参数,以一个字符串字典来提供这些参数。
dic_param= {'key1': 'value1', 'key2': 'value2'}
r = requests.get("https://www.csdn.net/get", params=dic_param)
打印输出该 URL,能看到 URL 已被正确编码:
print(r.url) # =>https://www.csdn.net/get?key1=value1&key2=value2
参考文献
菜鸟教程
重写和重载
https://blog.csdn.net/qq_33961117/article/details/81901018
HTTP请求
https://blog.csdn.net/weixin_42734407/article/details/81162026
https://blog.csdn.net/lanyang123456/article/details/72594982
http://baijiahao.baidu.com/s?id=1599992188940440730&wfr=spider&for=pc