一、列表
1、idle使用(Mac)
(1)代码自动补全 tab
(2)回退代码语句
control+p 上一个代码
control+n 下一个代码
2、列表就像是数组
列表是完备的python集合对象
且python的变量标识符没有类型。
1 >>> movies = ["The Holy Grail","The life of brian"]
2 >>> print(movies)
3 ['The Holy Grail', 'The life of brian']
4 >>> print(movies[0])
5 The Holy Grail
>使用下标访问列表数据
(1)列表操作
append() 列表末尾添加一个数据项
pop() 列表末尾删除数据
extend() 列表末尾添加一个数据集合
1 >>>movie.extend(["GOD","The girl"])
remove() 列表中删除特定数据项
insert() 特定位置前插入数据
>>> movies.insert(0,"Man")
(2)python列表可以包含混合类型的数据,可以存储任意类型的数据。
3、列表迭代
(1)for 目标标识符 in 列表名:
列表处理代码
1 >>> for each_mv in movies1:
2 print(each_mv)
列表处理代码必须在for循环下面缩进。列表处理代码块称为“组”。
(2)while
while使用时要考虑状态信息,这就需要一个计数标识符。(for 不用考虑状态信息)
1 >>> count=0
2 >>> while count < len(movies1):
3 print(movies1[count])
4 count = count+1
(3)建议使用for,尽量避免使用while
4、字符串引号使用
对于字符串可以使用双引号也可以使用单引号,但一个字符串不能混合使用。
注:在字符串中嵌入一个双引号……使用转义:\”
5、标识符命名规范
字母或下划线开头,剩余可以使用任意个字母字符、数字和/或者下划线。
6、python对大小写敏感
7、嵌套列表
(1)列表可以存储任何东西的集合,列表中的列表。
每个列表都是一个列表项集合,各列表项之间用逗号隔开,另外列表要用中括号括起。
1 >>> movies1104 = ["体会生活",2010,"the first man",2011,["zhangyimou",["panjinlian","women","china"]]]
2 >>> print(movies1104[4][1][2])
3 china
(2)嵌套列表遍历
if 条件:
代码块
else:
代码块
>>> for movies1104_each in movies1104:
if isinstance(movies1104_each,list):
for each1 in movies1104_each:
if isinstance(each1,list):
for each2 in each1:
print(each2)
else:
print(each1)
else:
print(movies1104_each)
注:
查看python BIF(内置函数)的方式;查看够功能用 help(某个BIF)
>> dir(__builtins__)
isinstance(each1,list)判断某个标识符是否包含某个人指定类型的数据。
8、函数
python函数用def语句定义。如何创建函数?
def 函数名 (参数):
函数代码组
>>> def print_mo (the_list):
for each_item in the_list:
if isinstance(each_item,list):
print_mo(each_item)
else:
print(each_item)
>>> print_mo(movies1104)
体会生活
2010
the first man
2011
zhangyimou
women
china
python3 默认递归深度不能超过100。
python使用缩进将语句归组在一起。
二、共享你的代码:函数模块
1、注释
三重引号"""或是#。
2、BIF
list() 工厂函数,创建一个新的空列表。
range() 返回一个迭代器,可以根据需要生成一个指定范围的数字。
enumerate() 创建成对数据的一个编码列表,从0开始
int() 将一个字符串或一个数转为一个整数
next() 返回一个可迭代数据结构中的下一项。
3、range() 打印缩进指定数目的制表符
1 >>> def print_mo (the_list,level):
2
3 for each_item in the_list:
4 if isinstance(each_item,list):
5 print_mo(each_item,level+1)
6 else:
7 for tab_stop in range(level):
8 print("\t",end="")
9 print(each_item)
10
11
12 >>> print_mo(movies1104,2)
13
14 体会生活
15 2010
16 the first man
17 2011
18 zhangyimou20 women
21 china
三、文件与异常:处理错误
1、python的基本输入机制是基于行的
open()打开文件时,会创建一个迭代器从文件向代码输入数据行,一次传入一行数据。标准流程“打开-处理-关闭”:
1 the_file = open('test.txt')
2
3 #处理代码木块
4
5 the_file.close()
1 >>> import os
2
3 >>> os.getcwd()#获取当前工作路径
4 '/Users/qanfuhong/Documents'
5
6 >>> os.chdir('/Users/qanfuhong/Desktop/HeadFirstPython/chapter3')#切换当前工作路径
7
8 >>> os.getcwd()
9 '/Users/qanfuhong/Desktop/HeadFirstPython/chapter3'
10
11 >>> data = open('sketch.txt')
12
13 >>> print(data.readline(),end='')#readline()从文件获取一个数据行
14
15 Man: Is this the right room for an argument?
16
17 >>> print(data.readline(),end ='')
18
19 Other Man: I've told you once.
20 >>> print(data.readline(),end ='')
21 Man: No you haven't!
22
23 >>> data.seek(0)#返回文件起始位置
24 0
25 >>> for each_line in data :
26 print(each_line,end='')#循环遍历,将文件的数据按行打印
27
28 Man: Is this the right room for an argument?
29 Other Man: I've told you once.
30 Man: No you haven't!
31 Other Man: Yes I have.
32 Man: When?
33 Other Man: Just now.
34 Man: No you didn't!
35 Other Man: Yes I did!
36 ……
37 Man: Yes it is!
38 >>>
2、split()方法有可选参数
用于控制将数据行分解为多少个部分。默认是将数据尽可能多的分解。
1 >>>data = open('sketch.txt')
2 >>>for each_line in data:
3 (role,line_spoken) = each_line.split(":")
4 print(role,end='')
5 print(' said: ',end='')
6 print(line_spoken,end='')
结果:
Man said: Is this the right room for an argument?
Other Man said: I've told you once.
Man said: No you haven't!
Other Man said: Yes I have.
each_line.split(':',1)表示只将数据行分解为两部分。
3、find()方法
寻找字符串的子串,找不到则返回-1,找到则返回子串在字符串的索引位置。
1 >>> each_line = "i love you ,nana."
2
3 >>> each_line.find(':')
4 -1
5 >>> each_line.find('nana')
6 12
附:项目中使用到的一个python脚本
主要功能是将sql查询结果进行排序加工。
1 #!/usr/bin/env python
2 # coding: utf-8
3 # In[3]:
4 import numpy as np
5 import pandas as pd
6 import sys
7 def generator30(filein,fileout):
8 df = pd.read_csv(filein,sep = '\t',header = 0)
9 df['advantage_user']=0
10 df['sayhirate'][df['sayhirate'].isnull()]=0
11 df['sayhirate'][df['sayhirate']>1]=1
12 for (k1,k2),group in df.groupby(['age','province']):
13 p30 = 1 + int(group.index.shape[0]*.3)
14 df.loc[group.index[0:p30],'adavantage_user'] = 1
15 df.loc[group.index[p30:],'adavantage_user'] = 0
16 df[(df['adavantage_user']!=0) & (df['adavantage_user']!=1)]=-1
17 df['adavantage_user'] = df['adavantage_user'].astype(int)
18 df['sayhirate'] = (df['sayhirate']*10000).astype(int)
19 df = df[['user_id','province','sex','age','sayhirate','adavantage_user']]
20 df.to_csv(fileout,sep='\t',index=0)
21
22 #filein, fileout分别为输入文件路径,输出文件路径
23 infile = sys.argv[1]
24 outfile = sys.argv[2]
25 generator30(infile,outfile)