Datawhale-Python基础-打卡Day5

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值