- 浏览: 2543256 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
http://www.iteye.com/topic/1092772 Python基础实用技巧
http://pythonmap.iteye.com/category/247013 Python学习笔记-HeadFirstPython
http://www.oschina.net/p/pythonwin
http://www.oschina.net/p/idle
http://idle.thomaslauer.com/IdleDownload.html
http://greybeard.iteye.com/category/188408 python个人系统学习笔记
此笔记为原创,参考教材为中国电力出版社的《Head First Python》
全书用例为Python3.
一、Python安装(Head First Python采用Python3):
环境win7,Python版本3.2.3
1、官网www.python.org下载Python3最新版本
2、安装过程不表
3、安装完成首在命令行中通过查看版本确定安装成功
window:D:\python32\python -V linux:python3 -V
二、IDLE:
1、IDLE是Python拿一送一的Python IDE(Python的集成开发环境)
2、IDLE虽说简陋,可对于菜鸟级别的新手足够用了。自带shell,编辑器有代码提示(按下Tab)、代码着色。据说好些大牛平时也用。
3、IDLE的shell中有代码回退(Alt-p)、代码前进(Alt-n)功能。
第一个习题:列表的数据处理
- cast = [ 'Cleese' , 'Palin' , 'Jones' , 'Idle' ] #创建列表并赋值给变量,变量无需声明(list-Python数据类型之一)
- print (cast) #输出cast变量值(print()-Python BIF)
- print (len(cast)) #输出cast变量值长度(len()-Python BIF)
- print (cast[ 1 ]) #输出被赋值给cast变量的列表中的第2个元素
- cast.append('Gilliam' ) #向cast中追加一个元素(append方法是列表自带方法)
- cast.pop() #删除列表中最后一个元素,并return最后一个元素
- cast.extend(['Gilliam' , 'Chapman' ]) #向列表末尾追加另一个列表,另一个列表中元素作为目标列表中新元素
- cast.remove('Chapman' ) #删除列表中指定元素
- cast.insert(0 , 'Chapman' ) #向列表中指定位置(此处为第一个元素前)插入一个元素
- '' '''列表的迭代'''
- movies = ['movie1' , 'movie2' , 'movie3' ] #创建列表并赋值给movies
- '' '''for循环是处理列表内个元素的最常用方法
- each_movie为目标标示符;movies为列表;print()代码块为列表元素处理代码'''
- for each_movie in movies:
- print (each_movie)
- '' '''while循环是编写迭代代码的另一种备选方法
- count 为一个计数标示符,用来表示列表状态信息'''
- count = 0
- while count < len(movies):
- print (movie[count])
- count += 1
- movie = [ 'The Holy Grail' , 1975 , 'director' , 91 ,
- ['starring' ,
- ['actor1' , 'actor2' , 'actor3' ]]] #列表内元素可以是各种数据类型,可嵌套
- '' '''使用if条件语句和for循环语句输出列表中嵌套的列表,本方法之判断嵌套的第一层列表'''
- for each_item in movie:
- if isinstance (each_item, list): #isinstance()为判断条件,返回true or false;isinstance()为BIF,根据参数判断数据类型
- for each_item_deep1 in each_item:
- print (each_item_deep1)
- else :
- print (each_item)
- '' '''创建一个递归函数解决多层嵌套列表的输出
- pring_lol为函数名
- the_list为参数'''
- movie = ['The Holy Grail' , 1975 , 'director' , 91 ,
- ['starring' ,
- ['actor1' , 'actor2' , 'actor3' ]]]
- def print_lol(the_list):
- for each_item in the_list:
- if isinstance(each_item, list):
- print_lol(each_item)
- else :
- print (each_item)
- pirint_lol(movie) #函数调用
零碎:
1、Python内置函数成为:BIF(built-in functions),print()函数便是其中之一
============================== 2 模块和包
2.1 模块
mymodule.py
#!/usr/bin/python
def sayHi():
print("hi")
version = "0.1"
t.py
#!/usr/bin/python
import nester.mymodule
mymodule.sayHi()
print(mymodule.version)
2.2 包
新建文件夹nester
vim nester.py
#!/usr/bin/python
def say_hi():
print("hi")
新建'setup.py',用于发布
vim setup.py
#!/usr/bin/python
from distutils.core import setup
setup(name = 'nester',
version = '1.0.0',
py_modules = ['nester'],
author = 'pythonmap',
author_email = 'yuanta11@gmail.com',
url = 'pythonmap.iteye.com',
description = 'A simple printer of nested lists')
构建此distribution:
终端中输入:python setup.py sdist
安装distribution:
终端中输入:python setup.py install
查看发布后的nester文件夹结构变化
发布后即可在其他模块中导入使用
# python setup.py sdist
running sdist
running check
reading manifest file 'MANIFEST'
creating nester-1.0.0
making hard links in nester-1.0.0...
hard linking setup.py -> nester-1.0.0
Creating tar archive
removing 'nester-1.0.0' (and everything under it)
# python setup.py install
running install
running build
running build_py
copying nester.py -> build/lib
running install_lib
copying build/lib/nester.py -> /usr/local/python312/lib/python3.1/site-packages
byte-compiling /usr/local/python312/lib/python3.1/site-packages/nester.py to nester.pyc
running install_egg_info
Removing /usr/local/python312/lib/python3.1/site-packages/nester-1.0.0-py3.1.egg-info
Writing /usr/local/python312/lib/python3.1/site-packages/nester-1.0.0-py3.1.egg-info
在任意目录下
vim t.py
#!/usr/bin/python
import nester
nester.say_hi()
======================3.Python第三课-初探文件与异常
从文件读取数据:
常用方式:使用open() BIF和for循环读取基于行的文件内容。
open()使用的基本流程:
#!/usr/bin/python
import os
if os.path.exists('t.txt'):
data = open('t.txt')
print(data.read())
data.close()
else:
print('The file is missing')
#!/usr/bin/python
'' '''打开一个名为't.txt'的文件.
把读取到得每行数据利用':'分割处理为讲话者和讲话内容后输出 '''
t.txt
1:11
2
3:33
import os if os.path.exists('t.txt'): data = open('t.txt') for each_line in data: if each_line.find(':') != -1: (role, line_spoken) = each_line.split(':', 1) print(role + ' said: ' + line_spoken) data.close() else: print('The file is missing')
输出:
1 said: 11
3 said: 33
碎碎念:
1、字符串的find
()内置方法,用来检索参数位置,返回指针值,如果未检索到返回-1.
2、字符串的split
()内置方法,用来以sep参数为基准分割字符串,返回分割后的列表。
3、获取方法、函数的使用帮助信息,可以先导入该方法所在模块,然后help之。内置函数直接help之。
- s = '2.33'
- help(s.split)
- import os
- help(os.path.exists)
-
help(open)
处理异常:
异常处理:为使代码逻辑更加清晰,先尝试运行代码,然后处理可能会发生的错误。
基本的异常处理:
改进Demo:
- try :
- data = open('sketch.txt' )
- for each_line in data:
- try :
- (role, line_spoken) = each_line.split(':' , 1 )
- print (role + ' said: ' + line_spoken)
- except ValueError: #处理try代码块内特定错误类型的异常
- pass
- data.close() #关闭文件
- except : #处理try代码块内所有错误类型的异常
- print ( 'The file is missing' )
碎碎念:
看了看下一章,貌似有些对文件和异常处理的补充内容。这节课还是初窥。
=================4.Python第四课-深入文件与异常(数据持久化)
1、创建文件,并将需要持久化得数据写入文件中。
- '' '''将上课demo中的谈话内容(conversations)按角色(role)的不同,分别存入两个文本文件中'''
- man = [] #分别定义两个list 用来存储两个role的conversations
- other = []
- try :
- data = open('sketch.txt' )
- try :
- for each_line in data:
- (role, line_spoken) = each_line.split(':' , 1 )
- line_spoken = line_spoken.strip()
- if role == 'man' : #通过判断role来确定要存入的list
- man.append(line_spoken)
- else :
- other.append(line_spoken)
- except ValueError:
- pass
- data.close() #别忘了完成文件操作关闭数据文件对象
- except IOError:
- print ( 'The file is missing!' )
- try :
- man_file = open('man_data.txt' , 'w' ) #数据文件对象中的文件参数如果不存在,并且相应目录有相应权限,open()会自动创建文件
- other_file = open('other_data.txt' , 'w' ) # 'w'为文件数据对象的'写'模式
- print (man, file = man_file) #print()函数中的file参数为写入的文件名
- print (other, file = other_file)
- man_file.close() #别忘了完成文件操作关闭数据文件对象
- other_file.close()
- except IOError:
- print ( 'File Error!' )
2、改进上面代码中的异常处理逻辑和代码:
上面代码中的异常处理方式依旧是不完善的,想想看,如果在man_file.close()语句之前,代码发生了错误,那么数据文件对象是不会被关闭掉的。
改进代码:
- man = []
- other = []
- try :
- data = open('sketch.txt' )
- try :
- for each_line in data:
- (role, line_spoken) = each_line.split(':' , 1 )
- line_spoken = line_spoken.strip()
- if role == 'man' :
- man.append(line_spoken)
- else :
- other.append(line_spoken)
- except ValueError:
- pass
- data.close()
- except IOError as ioerr: #将IOError异常对象赋予ioerr变量
- print ( 'File Error :' + str(ioerr)) #将ioerr转换为字符串类型
- try :
- man_file = open('man_data.txt' , 'w' )
- other_file = open('other_data.txt' , 'w' )
- print (man, file = man_file)
- print (other, file = other_file)
- except IOError as ioerr:
- print ( 'File Error: ' + str(ioerr))
- finally : #无论try代码块或者except代码块中的语句是否被执行,finally代码块中的语句
- if 'man_file' in locals(): #判断数据文件对象是否存在,loclas() BIF返回作用域中所有变量的字典
- man_file.close()
- if 'man_file' in locals():
- man_file.close()
3、Python中 文件处理的语法糖:
利用with语句,可以将文件处理的代码简化,无需考虑关闭文件,裁剪掉文件异常处理语句中的finally语句。
作用一:简化语法,减少工作量。
作用二:通过逻辑抽象,减少码农脑细胞死亡速度和出错概率。
对以上代码第二段之改进:
- try :
- with open('man_data.txt' , 'w' ) as man_file:
- print (man, file = man_file)
- with open('other_data.txt' , 'w' ) as other_file:
- print (other, file = other_file)
- except IOError as ioerr:
- print ( 'File Error: ' + str(ioerr))
OR
- try :
- with open('man_data.txt' , 'w' ) as man_file, open( 'other_data.txt' , 'w' ) as other_file:
- print (man, file = man_file)
- print (other, file = other_file)
- except IOError as ioerr:
-
print
(
'File Error: '
+ str(ioerr))
=====================5.将写入文件的列表格式化
可当我们试着把保存数据的文件读取出来会怎样呢?
try:
with open('man.txt', 'r') as fman:
print(fman.readline())
except IOError as err:
print(str(err))
执行时,返回一大...串儿字符串。里边包含了man.txt文件中的所有数据。
这种未被格式化的存储方式基本上是没什么用的!除非你把整个文件当一个字符串读出来,然后再去想各种办法解析...
2、把即将写入文本文件的数据格式化:
# vim /tmp/sketch.txt
man:man1
other:other2
man:man2
other:other2
other:other3
当然我们可以写出新的代码来实现数据格式化。
可第二课中我们曾经创建过一个nester模块,里边的print_lol函数就是用来格式化列表的。为什么不把它改造一个直接拿来使用呢?不要重复造轮子嘛...OOP吧!
改造print_lol函数
在nester目录中
vim /tmp/nester/nester.py
#!/usr/bin/python
import sys
def print_lol(the_list, level=0, d='\t', indent=False, file_name
=sys.stdout):
for each_item in the_list:
if isinstance(each_item, list):
print_lol(each_item, level+1, file_name)
else:
if indent:
for tab_stop in range(level):
print(d, end = '', file = file_name)
print(each_item, file = file_name)
#cd /tmp/nester
#python setup.py sdist
#python setup.py instal l
改造写入文件的代码块:
# vim /tmp/t.py
#!/usr/bin/python
import nester
man = []
other = []
try:
data = open('sketch.txt')
try:
for each_line in data:
(role, line_spoken) = each_line.split(':', 1)
line_spoken = line_spoken.strip()
if role == 'man':
man.append(line_spoken)
else:
other.append(line_spoken)
except ValueError:
pass
data.close()
except IOError as ioerr:
print('File Error :' + str(ioerr))
try:
with open('man_data.txt', 'w') as man_file, open('other_data.txt', 'w') as other_file:
nester.print_lol(man, file_name = man_file)
nester.print_lol(other, file_name = other_file)
except IOError as ioerr:
print('File Error: ' + str(ioerr))
如此便可以利用现有的print_lol函数,实现把格式化后的列表写入文本文件。
#cat man_data.txt
man1
man2
#cat other_data.txt
other2
other2
other3
==========================6.持久化相关的另一个模块pickle
第五课中我们利用nester模块中的print_lol函数对写入文本文件的列表进行了格式化,确保数据的可用性。
可如果我们需要写入其他的数据格式呢?难道要对每一种数据格式都创建一个格式化方法?
要累死程序猿吗?码农也是人啊!
Gudio还有有人情味儿的,python的标准库中有一个pickle模块可以解决这个问题!
使用pickle模块持久化数据
pickle模块可以保存各种数据类型的原始状态,我们不必再为数据写入文件前的格式化而担心了!
# vim /tmp/sketch.txt
man:man1
other:other2
man:man2
other:other2
other:other3
将第四课中的代码做如下修改:
t.py
- '' '''使用pickle模块持久化各种数据类型的数据'''
- import pickle
- man = []
- other = []
- try :
- data = open('sketch.txt' )
- try :
- for each_line in data:
- (role, line_spoken) = each_line.split(':' , 1 )
- line_spoken = line_spoken.strip()
- if role == 'man' :
- man.append(line_spoken)
- else :
- other.append(line_spoken)
- except ValueError:
- pass
- data.close()
- except IOError as ioerr:
- print ( 'File Error :' + str(ioerr))
- try :
- with open('man_data.txt' , 'wb' ) as man_file, open( 'other_data.txt' , 'wb' ) as other_file: #由于pickle以二进制模式存储数据,所以我们需要'wb'参数来以二进制方式操作文件
- pickle.dump(man, file = man_file) #dump是pickle中的一个方法,用来写入数据
- pickle.dump(other, file = other_file)
- except IOError as ioerr:
- print ( 'File Error: ' + str(ioerr))
- except pickle.PickleError as perr:
- print ( 'Pickling Error: ' + str(perr)) #pickle的异常
这样,我们使用pickle对处理完毕。接下来取出数据看看,是否如我们所愿。
tt.py
- import pickle
- man_data = []
- try :
- with open('man_file.txt' , 'rb' ) as fman: #用二进制方式打开文件
- man_data = pickle.load(fman) #pickle中的load方法用于从文件对象中取出数据
- except IOError as ioerr:
- print ( 'File Error: ' + str(ioerr))
- except pickle.PickleError as perr:
- print ( 'Pickling Error: ' + str(perr))
- print (man_data)
接下来我们可以看到输出到控制台的列表了!
# python t.py
# python tt.py
['man1', 'man2']
=======================7.提取书中所提供的文本文件中的时间,并且把其中前三个最短时间输出出来。
http://pythonmap.iteye.com/blog/1679400
python中还有一个数据类型——集合。集合跟列表不同点在于集合是无需的,集合内的元素是不能重复的,如果重复,将自动忽略。
所以利用集合的“元素不可重复”的特性来改进一下上边的代码:
# vim sketch.txt
2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
times中有重复的记录,需要在get_top3中把重复的值处理掉
调用sanitize函数以格式化每个time值
# vim t.py
#!/usr/bin/python
#格式化a.b
def sanitize(time):
if ':' in time:
splitter = ':'
(mins, secs) = time.split(splitter)
elif '-' in time:
splitter = '-'
(mins, secs) = time.split(splitter)
else:
return(time)
return(mins + '.' + secs)
#读取内容
def get_times(file_name):
times = []
try:
with open(file_name) as fdata:
data = fdata.readline()
data_list = data.strip().split(',')
for each_time in data_list:
clean_time = sanitize
(each_time)
times.append(clean_time)
return(times)
except IOError as ioerr:
print('IO Error: ' + str(ioerr))
#排序从小到大
def get_top3(times_list):
stimes = set
(times_list)
sorted_times = sorted
(stimes)
return(sorted_times[0:3])
times = get_times('sketch.txt')
print(get_top3(times))
输出
['2.01', '2.22', '2.34']
或者
def get_times(file_name):
try:
with open(file_name) as fdata:
data = fdata.readline()
data_list = data.strip().split(',')
times = [sanitize(each_time) for each_time in data_list] #使用列表推导来取代for迭代中列表的append方法
return(times)
except IOError as ioerr:
print('IO Error: ' + str(ioerr))
或者
def get_top3(times_list):
sorted_times = sorted(times_list)
clean_stimes =[]
for each_time in sorted_times: #迭代排序后的每一个列表值
if not each_time in clean_stimes: #判断此值是否已存在于clean_stimes列表中
clean_stimes.append(each_time)
return(clean_stimes[0:3])
发表评论
-
py实现登陆人人网(无验证码)
2013-02-01 11:29 1435#!/bin/python#-*- coding:UTF- ... -
mysql主从日志的定期清理
2013-01-21 16:24 1156[转]http://wangwei007.blog.51 ... -
python脚本监控网站状态
2013-01-15 17:30 1607http://baiying.blog.51cto.com/ ... -
python监控单台多实例数据库服务器的数据库端口
2013-01-15 17:30 1597http://wangwei007.blog.51cto.c ... -
Python + Django[web] 配置后台管理系统
2012-12-29 18:01 10434http://blog.sina.com.cn/s/blog_ ... -
Linux下python升级步骤
2012-11-16 15:07 1243首先下载源tar包 可利用linux自带下载工具wget ... -
使用python编写nagios脚本监控伺服器/交换机网卡状态
2012-11-15 18:17 3648【转载】http://blog.chinaunix.net/u ... -
python脚本监控Linux磁盘空间使用率
2012-11-15 18:11 6806【转载】http://blog.chinaunix.net/u ...
相关推荐
### Python基础知识精讲 #### 一、切片操作详解 **切片操作**是Python中处理序列(如列表、元组、字符串等)的一种非常重要的方法。它允许我们灵活地提取序列的一部分,甚至修改和删除其中的部分元素。 - **基本...
### Python基础知识汇总 #### 一、Python中的基本数据类型 Python是一种高级编程语言,支持多种数据类型,这对于理解和使用Python非常重要。以下是最基础的数据类型: ##### 1. 整数 (Integers) - **概念**: ...
python基础语法合集 python基础语法合集TXT python基础语法合集下载 python基础语法合集下载免费 Python基础语法合集 python语法汇总 python基础语法及知识总结 python基本语法 python基础语法手册pdf python语法...
python基础梳理.xmind
python基础整理汇总
【Python基础面试知识点详解】 1. **Python异常处理**: Python中的异常处理是程序运行出错时的反馈机制。常见的异常类型有FloatingPointError(浮点计算错误)、OverflowError(数值运算超出最大限制)、...
Python基础知识汇总 Python是一种广泛使用的高级编程语言,备受程序员和开发者的青睐。本资源摘要信息将对Python基础知识进行系统整理和总结,涵盖变量、数据类型、列表等基础概念,旨在帮助读者快速掌握Python编程...
python基础知识点汇总,概括性的列出python的基础知识,和一些常用的内建函数等,很基础的东西,总结了学习python第一阶段需要学习的东西。个人总结,仅供参考,后面还有进阶的知识点汇总。
【Python基础理论核心笔记汇总】 本笔记主要涵盖了Python编程语言的基础和高级主题,旨在帮助读者深入理解Python的核心概念。由阿King(cuijingjing@baidu.com)编写,适用于初学者和有一定经验的开发者,作为学习...
python基础总结相关汇总
python基础知识总结,涵盖了整个基础知识框架,对每一个概念及知识点都做出了总结,开启你的python之路吧
python基础知识梳理.xmind
Python基础知识点汇总 本文档汇总了Python基础知识点,包括下载和安装Python、环境变量配置、PyCharm的使用、第一个程序的编写、循环语句、条件控制语句、输出与输入等内容。 一、下载和安装Python Python是当前...
Python 基础入门到精通 ...本资源汇总了多个 Python 相关课程和视频教程,涵盖了 Python 基础知识、运维系统开发、自动化系统构建、FTP 软件开发、Git 版本控制等方面的内容,对于 Python 开发者和运维人员非常有价值。
"Python基础教程第二版高清"指的是《Python编程:从入门到实践》的第二版,这本书是Python学习的经典教材,提供了丰富的实例和实战项目,帮助读者掌握Python的核心概念和技术。"高清"可能指的是电子版的高清晰度,...
Python基础知识点汇总,方便新手入门学习。此文件是思维导图文件,需要用xmind等软件打开。
"Python 基础实例汇总讲解" 本资源为 Python 基础实例的汇总讲解,涵盖了取数问题、最值问题、累加问题、秦九韶算法、对称数、进制问题、字符串问题、数论质数、最大公约数、斐波那契数列等多个方面的知识点。 取...
我将 Python语法分为14个章节,以下是我对一些Python基础语法的简单描述: 1.Python基础概念: Python是人与计算机交流的语言,编程语言的一种,是面向对象语言 2.变量与数据类型:Python有几种内建的数据类型,包括...