本文结构
- 基本函数(eval,format,字符串处理(split,strip,join),lambda等)
- 数据类型辨析
eval(“str”)
去除字符串最外侧的引号,并执行去掉引号后的字符的内容。
str="python"
a= eval("str")
print(a)#结果输出'python'
b=eval("'python'")
print(b)#结果同上为'python'
c=eval("python")
print(c)
#出错,会显示 python not defined,即把你的python当成自变量,而这个自变量是未定义的。
python=123
d=eval("python")
print(d)
#可以先这么理解:
#去除双引号以后执行d=python,python是个变量,变量值等于123,因此输出123
format(var)
包含{}槽的模板字符串.format(逗号分隔的填充参数)
>>>"{0}才是臭{1}".format("Lybrith","弟弟")#参数序号从0开始
'Lybrith才是臭弟弟'#以参数序号对应的参数填充的字符串
槽的格式:{序号:<填充><对齐><宽度><,(千位分隔)><.精度><类型>}
即{序号:<填充(默认空格,只能有一个)><对齐><宽度><,(千位分隔)><.精度(浮点数小数部分的精度,以及字符串的最大输出长度)><类型(整数类型bcdoxX和浮点数类型eEf%)>}
字符串处理 (split(’’),strip(" "),join(list))
#文本文件的读取
>>>print(txt.read)
>___,___,
___,___.
>>>print(txt.readlines)
>["___,___,\n","___,___。\n"]
读取每一句话的时候,就需要用strip函数和split函数
- strip(chars)函数用于去掉左侧右侧出现的chars字符,因此用的是 ‘’ 符号。一维数据的情况下应该可以处理字符串和read,readline,readlines函数的结果,但不能处理多维情况下readlines的结果。
- split(sep)根据sep分隔字符串,默认为空格,sep可以是字符也可以是字符串,因此’ ’ 和 “”都可以使用。
>>>print(txt.readlines.strip('\n。').split(","))
>["___","___,","___","___"]
csv文件的读取也是相同,csv使用逗号分隔数据
#如果用read读取csv文件,得出来的就是 列表 形式的一段
>>>f=open("D:\R_languaga_main factors_analysis.csv","r")
>>> txt=f.read()
>>> txt
>代码,数学,物理,化学,语文,历史,英语\n1,71,64,94,52,61,52\n2,78,96,81,80,89,76\n3,69,56,67,75,94,80\n4,77,90,80,68,66,60\n5,84,67,75,60,70,63\n6,62,67,83,71,85,77\n7,74,65,75,72,90,73\n8,91,74,97,62,71,66\n9,72,87,72,79,83,76\n10,82,70,83,68,77,85\n11,63,70,60,91,85,82\n12,74,79,95,59,74,59\n13,66,61,77,62,73,64\n14,90,82,98,47,71,60\n15,77,90,85,68,73,76\n16,91,82,84,54,62,60\n17,78,84,100,51,60,60\n18,90,78,78,59,72,86\n19,80,100,83,53,73,70\n20,58,51,67,79,91,85\n21,72,89,88,77,80,83\n22,64,55,50,68,68,65\n23,77,89,80,73,75,70\n24,72,67,61,92,92,88\n25,73,72,70,88,86,79\n26,73,72,70,88,86,79\n27,77,81,62,85,90,87\n28,61,65,81,98,94,95\n29,79,95,83,89,89,79\n30,81,90,79,73,85,80\n31,85,77,75,52,73,59\n32,68,85,70,84,89,86\n33,85,91,95,63,76,66\n34,91,85,100,70,65,76\n35,74,74,84,61,80,69\n36,88,100,85,49,71,66\n37,63,82,66,89,78,80\n38,87,84,100,74,81,76\n39,81,98,84,57,65,69\n40,64,79,64,72,76,74\n41,60,51,60,78,74,76\n42,75,84,76,65,76,73\n43,59,75,81,82,77,73\n44,64,59,56,71,79,67\n45,64,61,49,100,99,95\n46,56,48,61,85,82,80\n47,62,45,67,78,76,82\n48,86,78,92,87,87,77\n49,66,72,79,81,87,66\n50,61,66,48,98,100,96\n'
>>>> print(f.readlines())
['代码,数学,物理,化学,语文,历史,英语\n','1,71,64,94,52,61,52\n', '2,78,96,81,80,89,76\n', '3,69,56,67,75,94,80\n', '4,77,90,80,68,66,60\n', '5,84,67,75,60,70,63\n', '6,62,67,83,71,85,77\n', '7,74,65,75,72,90,73\n', '8,91,74,97,62,71,66\n', '9,72,87,72,79,83,76\n', '10,82,70,83,68,77,85\n', '11,63,70,60,91,85,82\n', '12,74,79,95,59,74,59\n', '13,66,61,77,62,73,64\n', '14,90,82,98,47,71,60\n', '15,77,90,85,68,73,76\n', '16,91,82,84,54,62,60\n', '17,78,84,100,51,60,60\n', '18,90,78,78,59,72,86\n', '19,80,100,83,53,73,70\n', '20,58,51,67,79,91,85\n', '21,72,89,88,77,80,83\n', '22,64,55,50,68,68,65\n', '23,77,89,80,73,75,70\n', '24,72,67,61,92,92,88\n', '25,73,72,70,88,86,79\n', '26,73,72,70,88,86,79\n', '27,77,81,62,85,90,87\n', '28,61,65,81,98,94,95\n', '29,79,95,83,89,89,79\n', '30,81,90,79,73,85,80\n', '31,85,77,75,52,73,59\n', '32,68,85,70,84,89,86\n', '33,85,91,95,63,76,66\n', '34,91,85,100,70,65,76\n', '35,74,74,84,61,80,69\n', '36,88,100,85,49,71,66\n', '37,63,82,66,89,78,80\n', '38,87,84,100,74,81,76\n', '39,81,98,84,57,65,69\n', '40,64,79,64,72,76,74\n', '41,60,51,60,78,74,76\n', '42,75,84,76,65,76,73\n', '43,59,75,81,82,77,73\n', '44,64,59,56,71,79,67\n', '45,64,61,49,100,99,95\n', '46,56,48,61,85,82,80\n', '47,62,45,67,78,76,82\n', '48,86,78,92,87,87,77\n', '49,66,72,79,81,87,66\n', '50,61,66,48,98,100,96\n']
strip返回字符串,split对strip的结果处理,返回列表
如果对csv文件运用strip函数会报错,如下:
>>>txt=f.readlines().strip('\n').split(",")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'strip'
- join函数 形式为str.join(iter),将str插入iter变量之间形成新的字符串。主要用于写入csv文件。例如:
>>> " ".join(["1","2","3","4","5"])
'1 2 3 4 5'
>>> ",".join(["1","2","3","4","5"])
'1,2,3,4,5'
>>> "skrskr".join(["1","2","3","4","5"])
'1skrskr2skrskr3skrskr4skrskr5'
str=["广州”,“12”,“3","重庆")
>>>f.write(","t.join(str)+"\n")
生成的csv文件内容是:
广州,12,3,重庆
使用Join语句写入二维数据如下
>>>f=open("D:\R_languaga_main factors_analysis.csv","r")
>two_dimension_data=[]#创建空二维数组
>for line in f:#之所以用Line因为按行读取,对二维数据的读取跟一维数据有点不一样,需要用到循环
> two_dimension_data.append(line.strip('\n').split(","))
>f.close()
>>w=open("write_in.csv","w")
>for row in two_dimension_data:#列表读到一个数据(也是一个列表),然后用“,”连接起来。
> w.write(",".join(row)+"\n")
>w.close()
>#结果应该是两个文件内容完全相同。
补充: 对多维数据的读取并写出
f=open("D:\R_languaga_main factors_analysis.csv","r")
line=""
ls=[]
for line in f:
ls.append(line.strip('\n').split(","))
f.close()
#写出二维数据表
for row in ls:
line=""
for item in row:#需要用到双循环来对每一个元素进行处理
line+="{:10}\t".format(item)
print(line)
#结果是
代码 数学 物理 化学 语文 历史 英语
1 71 64 94 52 61 52
2 78 96 81 80 89 76
3 69 56 67 75 94 80
4 77 90 80 68 66 60
5 84 67 75 60 70 63
6 62 67 83 71 85 77
7 74 65 75 72 90 73
8 91 74 97 62 71 66
9 72 87 72 79 83 76
10 82 70 83 68 77 85
11 63 70 60 91 85 82
12 74 79 95 59 74 59
13 66 61 77 62 73 64
14 90 82 98 47 71 60
Lambda函数
lambda <语句>: <返回值>,如果满足语句的表达式,则返回给定值
常见用法:
>>>lambda x,y,z:x+y+z#求和
#对元素是列表的列表按键值values排序
>>>list.sort(key=lambda x:x[1], reverse=True)
其他函数(print, divmod, 转换类型函数)
print 函数的三种形式
>>>print("".format())#格式化输出
>>>print( ,end=" ")#改变结尾,可以不用"\n"换行符结尾
>>>print(var1,var2,var3)#输出多变量
divmod(x,y)= (x//y,x%y),以元组的形式给出x//y,x%y的值
round(x,d) 表示对x四舍五入,保留d位小数。默认没有d,则返回四舍五入的整数值,跟excel四舍五入的公式格式一致。
sort函数默认是升序输出,将参数改成reverse = True了则是降序输出
其他进阶函数参考如下教程:
数据类型
集合{} 序列() 列表 [] 字典{: }
序列类型主要是字符、列表、元组,所有序列都支持迭代,序列表示索引为非负整数的有序对象集合。其中字符和元组属于不可变序列,列表可变(元组类型一旦编译就不能修改,而元组类型的所有操作都可以由列表类型实现)。
#列表的索引正负,0元素是绝对不变的
>>>ls=[1020,"1021",["1022","1023"]]
>>>print(s[-1])
['1022','1023']
>>> print(ls[0:2:2])
[1020]#如果最后一步正好是列表最后一个元素,应该是不输出的
>>> ls.append("2012")
>>> print(ls[0:3:2])
[1020, ['1022', '1023']]
#索引头尾两个值最好同正同负,一正一负容易出现意想不到的结果
主要是掌握字典的一些函数
#两种创建字典的方式
>>>dict1=dict()
>>>dict2={"x1":"y1","x2":"y2","x3":"y3"}
#给空字典赋值
>>>dic1["key1"]="var1"
>>>dic1["key2"]="var2"
#返回键值对中的其中一个
>>>dic1.values()
['var1','var2']
>>>dic2.keys()
['x1','x2','x3']
词频统计是最常见的一个例子了,最常用的函数是dic.get(key,defult),找到对应键的值下,若不存在则返回默认值。
下面就是本文的最后的内容了,附上一段英文文本的词频统计的代码:
>>>txt=open("soure_txt.txt","r").read().lower()
>>>for ch in '!#$&*()+,-./<=>?@#[\\]~`^"”{|}':
txt=txt.replace(ch," ")
return txt
>>>lines=txt.split(" ")
>>>words={}
>>>for word in lines:#最常考的词频统计语句
> words[words]=words.get(word,0)+1
>>>words_lists= list(words.items)#将字典的所有键值对建立列表
>>>items.sort(key=lambda x:x[1],reverse=True)#按照列表的每个元素的[1]列进行排序,最大的先输出
>>>for i in range(10):#输出top 10
> word,counts=item[i]#元素为列表的列表将值分别赋给两个变量
> print("{0:<10}{1:>5}",format(word,counts))
>