最近写一些查询,对比,管理数据库的python脚本,以下是一些用到的知识点,还在继续补充中
1.python中的缩进问题:
- 初学python必看的部分,有过c/c++基础感觉很容易懂,好处是规范了代码。
- 用vim编写注意空格和tab的使用,缩进尽量用tab,推荐使用一款编辑器sublime text来编写比较好用
- vim中查看格式的命令为':set list',可以用‘T%s/四个空格/tab/‘来替换每行首次出现的四个空格为tab键。
- 写好缩进就没什么问题了,刚开始总是各种错误,最容易的错误就是空格和tab混用,尽量用一种看习惯。
- 写python的时候想用全局变量是总是弄不明白
- 在python中全局定义:
- 在模块内、在所有函数外面、在class外面,这就是全局变量。
- 局部变量:在函数内、在class的方法内(未加self修饰的),这就是局部变量
- 静态变量:在class内的,但不在class的方法内的,这就是静态变量
- 实例变量:在class的方法内的,用self修饰的变量,这就是实例变量
python能够改变变量作用域的代码段是def、class、lamda,与c++不同的是if else for while try except中的都是全局变量
3.python 中字符串的
- Python中的分割字符串split()函数的用法:
按照某个字符或字符串分割
str.split('\t')
需要注意:如果是字符串为Str=‘||||||’
print Str.split('|||')
输出:['','','']
所以写分割字符串要看字符串里存在不存在连续的分割符,同理制作分割符分割的字符串尽量选一个字符比较常见的是'\t'制表符。
- 对字符串的分割函数,用法:list=str.split('str1')意思是把str以str1分割后放在list里面
- .join()函数
- strip()函数
str.strip() 默认去掉末尾的'\n'换行,也可以加入参数 str.strip('s') 去掉末尾的's' 常常用来处理按行读取文件处理字符 注意:当字符串里面只有一个字符比如说'\n',此时调用strip()则去不掉
- replace()函数
python lower()方法
str.lower()
返回结果:将str变小写
4.python多进程multiprocessing中进程池Pool类的使用:
5.python文件处理:
- http://blog.csdn.net/lsq2902101015/article/details/51305825
- python读写文件,读写数据库
- http://blog.csdn.net/muwinter/article/details/77196261
- https://www.cnblogs.com/dwtt/p/7772639.html
- https://zhidao.baidu.com/question/1369792116921088619.html
6.字典操作:
- 融合两个字典
dictMerged=dict(dict1)
dictMerged.update(dict2)
或者
**如果待融合字典中有字典的就不灵了dictMerged2=dict(dict1, **dict2)
- 删除字典key:
del dic[key]
- get函数:
dict.get(key, default=None)
key:dict的键值
default:如果键值不存在,key的默认值
7.list操作:
- (1)合并连个list:
>>> L1 = [1, 2, 3, 4, 5]>>> L2 = [20, 30, 40]>>> L1.extend(L2)>>> L1[1, 2, 3, 4, 5, 20, 30, 40]切片:贴片更灵活,随意插。>>> L1 = [1, 2, 3, 4, 5]>>> L2 = [20, 30, 40]>>> L1[len(L1):len(L1)] = L2>>>>>> L1[1, 2, 3, 4, 5, 20, 30, 40]
- (2)list关于排序:
方法1:sort()
方法2:sorted()
sort用法:
L=[1,3,2,5,4]
L.sort()
print L
输出[1,2,3,4,5],sort会改变原来的list
与sort 不同的是sorted会生成一个list
sorted用法:
首先有下面参数:
iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
basic
>>> print sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5] >>> L = [5, 2, 3, 1, 4] >>> L.sort() >>> print L [1, 2, 3, 4, 5]
cmp
>>>L = [('b',2),('a',1),('c',3),('d',4)] >>>print sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) [('a', 1), ('b', 2), ('c', 3), ('d', 4)]key
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
reverse
>>> print sorted([5, 2, 3, 1, 4], reverse=True)
[5, 4, 3, 2, 1]
>>> print sorted([5, 2, 3, 1, 4], reverse=False)
[1, 2, 3, 4, 5]
key比cmp快
8.python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
*9.python的编码问题:
10.json的用法:
11.更改数据库是要用到conn.commit().
12.redis:
13.python中导入包要添加包的路径:sys.path.append('/search/yuanbo/new_merge_hotel_lk_no_city')
可以将导入模块打印出检查一下:
import config
print config
exit(0)
14.读写数据库要处理好每个字段的信息:
处理的方式要看对端的处理:这里一个很好的例子
hotel_static_dic={}
for sidkey in s_sid_set:
if rds.exists('base_'+sidkey):
adic=json.loads(rds.get('base_'+sidkey))
for key in adic:
if adic[key]==None:
adic[key]=''
elif isinstance(adic[key],unicode):
adic[key]=adic[key].encode('utf-8')
elif isinstance(adic[key],int) or isinstance(adic[key],long)\
or isinstance(adic[key],float):
adic[key]=str(adic[key])
else:
adic[key]=''
for key in adic:
adic[key]=adic[key].strip().replace('\t',' ').replace('\n','')
if adic['name']=='' or adic['name'].lower() == 'null':
adic['name'] = adic['name_en']
if adic['name_en']=='' or adic['name_en'].lower() == 'null':
adic['name_en'] = adic['name']
try:
adic['grade'] = float(adic['grade_str'])
except Exception,e:
adic['grade'] = -1
del adic['grade_str']
try:
adic['star'] = float(adic['star_str'])
if adic['star']<0:
adic['star']=-1.0
elif adic['star']>5:
adic['star']=5.0
except Exception,e:
adic['star']=-1
del adic['star_str']
try:
adic['review_num']=int(float(adic['review_num_str']))
except Exception,e:
adic['review_num']=-1
del adic['review_num_str']
hotel_static_dic[sidkey]=adic
15.python中的日期以及时间
- 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
- UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
- 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
- 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:
- import time
-
- time.time(): 返回当前时间戳
- time.localtime():将时间戳转换为当前时区的struct_time
- time.mktime(t):将一个struct_time转化为时间戳
>>> time.mktime(time.localtime()) 1304576839.0
- time.sleep(secs):线程推迟指定的时间运行。单位为秒
- time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入
- time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出
#!/usr/bin/python import time t = (2009, 2, 17, 17, 3, 38, 1, 48, 0) t = time.mktime(t) print time.strftime("%b %d %Y %H:%M:%S", time.gmtime(t))
- time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
s1='20120116' s2='20120216'; a=time.strptime(s1,'%Y%m%d'); b=time.strptime(s2,'%Y%m%d'); a_datetime=datetime.datetime(*a[:3]); b_datetime=datetime.datetime(*b[:3]); print b_datetime-a_datetime;
- time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))
>>> time.ctime() 'Thu May 5 14:58:09 2011' >>> time.ctime(time.time()) 'Thu May 5 14:58:39 2011' >>> time.ctime(1304579615) 'Thu May 5 15:13:35 2011'
- time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
>>>time.gmtime() time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=6, tm_min=19, tm_sec=48, tm_wday=3, tm_yday=125, tm_isdst=0) 注意:这里的tm_wday=3表示的是周几,但是要在这个返回值的基础上往后推一天,即表示的是周四,而不是周三。