这里写目录标题
语法
拷贝
Python 直接赋值、浅拷贝和深度拷贝解析
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
1、b = a: 赋值引用,a 和 b 都指向同一个对象。
2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
数据结构
str
split
str.split(sep=None, maxsplit=-1) 第二个参数代表最大分割数。是1的话最大分割数为2.
maxsplit默认为-1(既不指定maxsplit的值),最大分割。
list
把 x 中的变量类型由字符串变为 int
x = [ '1', '2', '3' ]
x = list(map(int, x))
dict
json.loads兼容单引号数据
import json
data = "{'field1': 0, 'field2': 'hehehehe', 'field3': 'hahaha'}"
json.loads(data) # json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
data = json.dumps(eval(data)) # 不报错
dict排序
items = adict.items()
items.sort()
return [value for key, value in items]
defaultdict
普通字典调用时用法 dict[element] = xxx, 前提是element字典里,如果不在字典里就会报错
defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值
默认值是什么?
# dict =defaultdict( factory_function)
# defaultdict接受一个工厂函数作为参数,这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0
from collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] ='two'
print(dict1[1])
print(dict2[1])
print(dict3[1])
print(dict4[1])
out
0
set()
[]
文件系统
文件
计算字符串和文件md5值的方法
和linux自带的md5sum命令计算结果一致
计算字符串md5值
import hashlib
def string_to_md5(string):
md5_val = hashlib.md5(string.encode('utf8')).hexdigest()
return md5_val
计算文件md5值
#coding: utf-8
import os
import hashlib
import sys
def md5sum(fname):
if not os.path.isfile(fname):
return False
try:
f = file(fname, 'rb')
except:
return False
m = hashlib.md5()
# 大文件处理
while True:
d = f.read(8096)
if not d:
break
m.update(d)
ret = m.hexdigest()
f.close()
return ret
if __name__ == "__main__":
if len(sys.argv) < 2:
print(u"请输入文件路径")
sys.exit(1)
filepath = sys.argv[1]
print(md5sum(filepath))
读文件(ignore编码错误)
with codecs.open('data/journalName1.csv', 'rU', errors="ignore") as file:
reader = csv.reader(file)
for line in reader:
print(line)
跳过第一行读取文件
with open('file_name', 'r') as f:
lines = f.readlines()[1:] # skip the first line.
for line in lines:
print(line)
with open('file_name', 'r') as f:
next(f) # skip the first line.
for line in f.readlines():
print(line)
python下遍历文件夹中所有文件
import os
for i in os.walk(path):
print(i)
import os
filenames = os.listdir(path)
for filename in filenames:
print(filename)
import excel处理模块xlrd
import xlrd
def read_excel():
# 打开文件
workbook = xlrd.open_workbook('./test.xlsx')
# 获取所有sheet
print(workbook.sheet_names()) # [u'sheet1', u'sheet2']
# 根据sheet索引或者名称获取sheet内容
sheet1 = workbook.sheet_by_index(0) # sheet索引从0开始
# sheet的名称,行数,列数
print(sheet1.name, sheet1.nrows, sheet1.ncols)
# 获取整行和整列的值(数组)
rows = sheet1.row_values(3) # 获取第四行内容
cols = sheet1.col_values(2) # 获取第三列内容
print(rows)
print(cols)
# 获取单元格内容
print(sheet1.cell(1, 0).value.encode('utf-8'))
print(sheet1.cell_value(1, 0).encode('utf-8'))
print(sheet1.row(1)[0].value.encode('utf-8'))
# 获取单元格内容的数据类型
print(sheet1.cell(1, 0).ctype)
if __name__ == '__main__':
read_excel()
xls文件内容的编码问题使用xlrd报错XLRDError,编码转换
file="Important_declaredate.xls"
f = open(file, 'rb')
lines = f.readlines()
for line in lines:
line = line.decode('gb2312').encode('utf8')
print line
编码
encode decode
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
- decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
- encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。
网络
requests简单demo
url = 'http://serving.c7e6379018aad473385b99f37fbab2471.cn-shanghai.alicontainer.com/v1/models/push_rank:predict'
headers = {'Content-Type':'application/json'}
features = {"feat_ids":[[1]*816], "feat_vals":[[1]*816]}
d = json.dumps({"signature_name":"serving_default","inputs":features})
response = requests.post(url, data=d, headers=headers)
print(response.text)