了解python中的类,对象,方法,属性
在python中,一个对象的特征也称为属性(attribute)。它所具有的行为也称为方法(method)
结论:对象=属性+方法
在python中,把具有相同属性和方法的对象归为一个类(class)
比如人类,动物,植物等等,这些都是类的概念。
类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化。类不代表具体的事物,而对象表示具体的事物。
属性不属于类,而是属于各个类的实例。也就是说属于对象。
创建类时,可以定义一个特定的方法,名为init(),只要创建这个类的一个实例
就会运行这个方法
try-except语句
首先,我们先介绍这个怎么用,try-except是用来引发异常,所以,程序执行的时候,首先会执行try部分,如果try报错,就会执行except部分,如果try部分没有报错,程序就会跳过except部分执行。
字典键的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
print "dict['Name']: ", dict['Name'];
结果为
dict[‘Name’]: Manni
响应数字
2xx表示成功,3xx表示你应该去另一个地址,4xx表示你错了,5xx表示服务器错了
new
- 利用Python保存数据到JSON文件
1.我们可以调用库的loads()
方法将JSON文本字符串转为JSON对象,可以通过dumps()
方法将JSON对象转为文本字符串**
2.通过中括号加0索引,可以得到第一个字典元素,然后再调用其键名即可得到相应的键值。获取键值时有两种方式,一种是中括号加键名,另一种是通过get()
方法传入键名。这里推荐使用get()方法,这样如果键名不存在,则不会报错,会返回None。另外,get()方法还可以传入第二个参数(即默认值),示例如下:
data[0].get('age')
data[0].get('age', 25)
运行结果如下:
None
25
这里我们尝试获取年龄age,其实在原字典中该键名不存在,此时默认会返回None。如果传入第二个参数(即默认值),那么在不存在的情况下返回该默认值。
3.值得注意的是,JSON的数据需要用双引号
来包围,不能使用单引号
4.另外,如果想保存JSON的格式,可以再加一个参数indent
,代表缩进字符个数。示例如下:
with open('data.json', 'w') as file:
file.write(json.dumps(data, indent=2))
5.为了输出中文,还需要指定参数ensure_ascii为False,另外还要规定文件输出的编码:
with open('data.json', 'w', encoding='utf-8') as file:
file.write(json.dumps(data, indent=2, ensure_ascii=False))
这样就不会出现中文乱码了。
- Python读取和写入CSV文件的过程
1.写入
import csv
with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'Mike', 20])
writer.writerow(['10002', 'Bob', 22])
writer.writerow(['10003', 'Jordan', 21])
首先,打开data.csv文件,然后指定打开的模式为w(即写入),获得文件句柄,随后调用csv库的writer()方法初始化写入对象,传入该句柄,然后调用writerow()
方法传入每行的数据即可完成写入。
如果想修改列与列之间的分隔符,可以传入delimiter
参数,其代码如下:
import csv
with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile, delimiter=' ')
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'Mike', 20])
writer.writerow(['10002', 'Bob', 22])
writer.writerow(['10003', 'Jordan', 21])
这里的delimiter参数为空格所以数据就从逗号变成了空格。
另外,我们也可以调用writerows()
方法同时写入多行,此时参数就需要为二维列表,例如:
import csv
with open('data.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id', 'name', 'age'])
writer.writerows([['10001', 'Mike', 20], ['10002', 'Bob', 22], ['10003', 'Jordan', 21]])
但是一般情况下,爬虫爬取的都是结构化数据,我们一般会用字典来表示。在csv库中也提供了字典的写入方式,示例如下:
import csv
with open('data.csv', 'w') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})
这里先定义3个字段,用fieldnames表示,然后将其传给DictWriter来初始化一个字典写入对象,接着可以调用writeheader()方法先写入头信息,然后再调用writerow()方法传入相应字典即可。最终写入的结果是完全相同的
如果要写入中文内容的话,可能会遇到字符编码的问题,此时需要给open()参数指定编码格式。比如,这里再写入一行包含中文的数据,代码需要改写如下:
import csv
with open('data.csv', 'a', encoding='utf-8') as csvfile:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({'id': '10005', 'name': '王伟', 'age': 22})
2.读取
import csv
with open('data.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
运行结果如下:
['id', 'name', 'age']
['10001', 'Mike', '20']
['10002', 'Bob', '22']
['10003', 'Jordan', '21']
['10004', 'Durant', '22']
['10005', '王伟', '22']
另外,如果接触过pandas的话,可以利用read_csv()方法将数据从CSV中读取出来,例如:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
运行结果如下:
id name age
0 10001 Mike 20
1 10002 Bob 22
2 10003 Jordan 21
3 10004 Durant 22
4 10005 王伟 22