-
1.python
1.1 在Mac下安装python模块
将下载的的模块压缩文件解压,同时在mac 终端切换到压缩文件夹所在目录下;
(cd / 回到根目录 cd 路径名 dirs 查看当前路径)
cd 所在路径名
password :
sudo python setup.py install
基本完成
1.2 python抓爬网页时出现乱码情况
直接给出方法
#encoding:utf-8
import urllib2
import chardet
import sys
req = urllib2.Request("http://www.baidu.com/")
res = urllib2.urlopen(req)
content = res.read()
res.close()
# 编码转换
#content = unicode(content,"utf-8").encode("utf-8") #
#content = content.decode("utf-8").encode("utf-8") #
# 上面的方法执行,是事先知道网页的编码是采用utf-8 而且系统的编码是utf-8
#如果在不知道网页的编码方式时, 可以通过一个库 chardet,自动监测网页的编码方式,
result = chardet.detect(content)
charset = result["encoding"] #网页编码
type =sys.getfilesystementcoding() # 系统编码
# 这样就可以通过
content = content.decode("charset").encode(type)
print content
1.3 python中出现异常
1.3.1
TypeError: coercing to Unicode: need string or buffer, int found
TypeError: coercing to Unicode: need string or buffer, gaierror found
可能是字符串连接时出现了问题。比如
count = 1
info= u"""a=""" + count + u"""次连接"""
print(info)
1.4 python正则表达式的应用
1.4.1
html = r'<li><a href="http://www.weather/weather/9111012010.shtml" target="_blank">大雨</a></li>' # html网页
html = html.replace(" ","")
urls = re.findall(r"<a.*?href=.*?<\/a>",html,re.I) #主要匹配<a></a>之间的内容 ,返回列表
url = urls[0]
pattern = re.compile("href=\"(.+?)\"") # 主要匹配href之后的连接 即 <span style="font-family: Arial, Helvetica, sans-serif;">http://www.weather/weather/9111012010.shtml</span>
patter2 = re.compile("(?<=>)[^<>]+(?=<)") #主要匹配网页标签之间的内容
pattern.findall(x), patter2.findall(x)[0]
1.5 python时间差、日期差
这里也许有很多方法,现在个人能够用的上很简单如下:
curTime = "00:00:00"
curTime = datetime.datetime.strptime(curTime, "%H:%M:%S")
newTime = datetime.datetime.strptime(newTime, "%H:%M:%S") #newTime 可能是从数据库中读取的时间数据
print newTime
sub = (newTime-curTime).seconds/3600 # 先求出相差的秒,之后求出相差的小时数
print sub
curDate = datetime.datetime.strptime('2014-08-01','%Y-%m-%d')
newDate = datetime.datetime.strptime('2014-11-12','%Y-%m-%d')
print (newDate-curDate).days #求出相差的天数
-
2.数据库(mysql)
2.1 使用MySQL遇到问题
Error Code: 1175. You are using safe update
在使用使用MySQL执行update或delete或者Insert的时候报错:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.
在使用mysql执行update的时候,如果不是用主键当where语句,会报如上错误,使用主键用于where语句中正常。
原因:这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式
-
3.
-
4.
-
5.数据结构
5.1.递归
要理解递归,得要理解递归
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。
递归关键要理解使用递归栈的进出过程。
在理解递归之前,先了解函数调用的过程机制:
任何函数之间不能嵌套定义, 调用函数与被调用函数之间相互独立(彼此可以调用)。 发生函数调用时,被调函数中保护了调用函数的运行环境和返回地址,使得调用函数的状态可以在被调函数运行返回后完全恢复,而且该状态与被调函数无关。 被调函数运行的代码虽是同一个函数的代码体,但由于调用点,调用时状态, 返回点的不同,可以看作是函数的一个副本,与调用函数的代码无关,所以函数的代码是独立的。被调函数运行的栈空间独立于调用函数的栈空间,所以与调用函数之间的数据也是无关的。函数之间靠参数传递和返回值来联系,函数看作为黑盒。
递归调用会容易造成栈溢出问题, 最好在没有办法可用时,再考虑用递归调用。栈溢出,其他内存被占用了!
递归的应用
-
6. 溢出
6.1 缓存区溢出:简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。
其中栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。