最近写一些查询,对比,管理数据库的python脚本,以下是一些用到的知识点,还在继续补充中

1.python中的缩进问题:

  • 初学python必看的部分,有过c/c++基础感觉很容易懂,好处是规范了代码。
  • 用vim编写注意空格和tab的使用,缩进尽量用tab,推荐使用一款编辑器sublime text来编写比较好用
  • vim中查看格式的命令为':set list',可以用‘T%s/四个空格/tab/‘来替换每行首次出现的四个空格为tab键。
  • 写好缩进就没什么问题了,刚开始总是各种错误,最容易的错误就是空格和tab混用,尽量用一种看习惯。

2.python变量的生命周期:

  1. 写python的时候想用全局变量是总是弄不明白
  2. 在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文件处理:

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
  1. time.time(): 返回当前时间戳
  2. time.localtime():将时间戳转换为当前时区的struct_time
  3. time.mktime(t):将一个struct_time转化为时间戳
>>> time.mktime(time.localtime())
1304576839.0

  1. time.sleep(secs):线程推迟指定的时间运行。单位为秒
  2. time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入
  3. 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))

  1. 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;

  1. 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'

  1. 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表示的是周几,但是要在这个返回值的基础上往后推一天,即表示的是周四,而不是周三。

17.