“人生苦短,我学python”是编程界的一句名言。用python编写小脚本的便利性,让很多其他语言的学习者都把python作为副语言。有了某种语言的基础,学习另一种语言应该是很快的。编程概念非常相似,只是看语言的差异。有了Java基础,学好Python,准备上路。基本操作安装好python环境后,运行win+R,输入python,直接进入python交互页面,可以进行数学运算。>>>2+24表1数学运算符,优先级从高到低运算符运算示例取值**指数2**38%取模/余数22%86//整数除法/商舍入22//82/除法22/82.75*乘法3*515-减法5-23+加法2+24从上面可以看出python的前两种基本类型整数,浮点型。这两个类似于java中的概念。作为字符串的基本类型,当然少不了字符串。和java一样,字符串是可以拼接的。例如:>>>'AAA'+'BBB''AAABBB'>>>'CCC'+25Traceback(最近调用最后):文件“”,第1行,在TypeError:canonlyconcatenatestr(not"int")tostr>>>'DEF'*3'DEFDEFDEF'如上'AAA'+'BBB'可以直接拼接字符串。但与java不同的是,python不会进行类型强制转换,所以当使用字符串'CCC'+inttype25时,会报错。在python上执行*操作,字符串将被复制。在这里为变量名插入一个段落。在java中声明变量时,需要指定变量类型,而在python中则不需要,但是python的变量名也需要一定的规则。只能是一个字。只能包含字母、数字和下划线。不能以数字开头。类型转换为了让int类型5转换成string类型,以便与string进行拼接,python提供了一些内置函数。表2一些python内置函数|功能|角色|例子||:-----:|:----:|:----:||str()|转换类型为字符串|str(5)||int()|转换类型为整数|int('5')||float()|转换类型为浮点数|float('5')||print()|打印函数|略||input()|读取用户输入数据|myName=input()||len()|Content-Length|len(myName)|ControlFlowBooleans现在介绍第四个数据类型,布尔值。Python的布尔值也有true或false之分,但python中true为True(注意T必须大写),false为False(F也必须大写),同一个Boolean类型不能与其他类型进行比较。>>>TrueTrue>>>trueTraceback(最近调用最后):文件“”,第1行,在NameError:名称“true”未定义>>>True=1文件“”,line1SyntaxError:can'tassigntokeywordcomparisontypetable3comparisontypeoperatormeaning==equalto!=不等于<小于>大于<=小于等于>=大于等于python也可以使用二元运算符and,or,not在java中等同于and、or、not。条件和代码块您之前看到的布尔表达式可以被认为是条件,它与表达式是一回事。“条件”只是控制流语句上下文中更具体的名称。条件总是评估为布尔值,True或False。控制流语句根据条件是True还是False来决定要做什么。几乎所有的控制流语句都使用条件。代码块python没有java中的{}来区分代码块。python中的所有代码块都是缩进的。代码块在缩进增加时开始。代码块可以包含其他代码块。当缩进减少到零,或者减少到周围代码块的缩进时,代码块结束。>>>if'a'=='b':...print('true')...else:...print('false')...false上面是一个ifelse的控制流程,条件后面跟一个冒号,代码块需要缩进。while循环的格式如下:spam=0whilespam<5:print('Hello,world.')spam=spam+1另外python还有break和continue关键字可以使用。for循环for循环单独拿出来表示敬意。for循环的格式如下:forkeyword;一个变量名;在关键字中;调用range()方法,最多传入3个参数;冒号;从下一行开始,一个后退的代码块(称为for子句)。foriinrange(5):print('JimmyFiveTimes('+str(i)+')')i分别执行0,1,2,3,4.range()方法实际上有三个参数,但其中两个可以省略。range(start,end,gap),可以指定开始、结束和步长。>>>foriinrange(0,10,3):...print(i)...0369functionimportmodulePython程序可以调用一组基本函数,称为“内置函数”,包括你看print()、input()和len()函数。Python还包括一组称为“标准库”的模块。每个模块都是一个Python程序,其中包含一组可以嵌入到您的程序中的相关函数。例如,math模块有与数学运算相关的函数,random模块有与随机数相关的函数,等等。使用import或fromimport语句自定义函数除内置函数外,大部分函数都是自定义的。(连从模块导入的函数都是别人自定义给你用的)defhello(name):print('Hello'+name)deffunctionname(parameter):FunctionbodyNone在Python中有个值叫做None,它意味着没有价值。None是NoneType数据类型的唯一值(其他编程语言可能称此值为null、nil或undefined)。就像布尔值True和False一样,None必须首字母N大写。异常处理deftemp_convert(var):try:returnint(var)exceptValueError,Argument:print"Theparameterdoesnotcontainanumber\n",Argument类似于java,python使用try和except进行捕获和处理,但是在Except中可以跟异常类(比如例子中的ValueError),以及触发某个字段的参数(比如例子中的Argument,这实际上是varintry)。列表可以看作是java中的数组。存储一些元素,比如>>>spam=['cat','bat','rat','elephant']。我们可以通过索引获取一个元素,比如spam[0]='cat',我们可以从后往前获取数据,比如spam[-1]='elephant'。除了直接操作索引获取某个元素外,切片还可以通过切片获取子列表。>>>spam[1:3]['bat','rat']>>>spam[0:-1]['cat','bat','rat']拼接和复制与java不同是的,python列表可以自由拼接复制。>>>[1,2,3]+['A','B','C'][1,2,3,'A','B','C']>>>['X','Y','Z']*3['X','Y','Z','X','Y','Z','X','Y','Z']列表组合有些关键字和方法删除列表中的一个元素,可以直接使用del关键字。您还可以组合for循环>>>supplies=['pens','staplers','flame-throwers','binders']>>>foriinrange(len(supplies)):print('Index'+str(i)+'insuppliesis:'+supplies[i])用in和notin直接判断一个元素是否在列表中>>>'howdy'in['hello','hi','howdy','heyas']True>>>spam=['hello','hi','howdy','heyas']>>>'cat'inspamFalseindex()方法确定元素在列表标记,没有则报错。>>>spam=['Zophie','Pooka','Fat-tail','Pooka']>>>spam.index('Pooka')1使用append()和insert()方法append()方法调用将参数添加到列表的末尾。insert()方法可以在列表中的任何下标处插入一个值。insert()方法的第一个参数是新值的索引,第二个参数是要插入的新值。使用remove()方法从列表中移除值使用sort()方法对列表中的值进行排序。在java中,我们知道String是被final修饰的,所以String本身是不能被修饰的。如果String被修改,实际上是在内存中创建了一个新的String。类似的python还有一种不可修改的数据类型——元组。元组类似于列表,很多方法都是通用的。但是,元组是用“()”表示的,元组中的元素不能修改,也不能增删。元组和列表转换函数list()和tuple()将返回传递给它们的值的列表和元组版本。>>>tuple(['cat','dog',5])('cat','dog',5)>>>list(('cat','dog',5))['cat','dog',5]>>>list('hello')['h','e','l','l','o']引用和引用函数>>>spam=[0,1,2,3,4,5]>>>cheese=垃圾邮件>>>cheese[1]='你好!'>>>spam[0,'Hello!',2,3,4,5]>>>cheese[0,'Hello!',2,3,4,5]看上面的代码,很简单要理解,spam会复制对cheese的引用而不是复制的对象,因此任何引用操作都会更改唯一的对象。如果要为奶酪引用生成新对象,则需要使用复制函数copy()和deepcopy()。其实就是java中的浅拷贝和深拷贝。>>>importcopy>>>spam=['A','B','C','D']>>>cheese=copy.copy(spam)>>>cheese[1]=42>>>spam['A','B','C','D']>>>cheese['A',42,'C','D']deepcopy()deepcopy()的意思是不仅生成一个相同的新object,就连垃圾邮件里面的数据也跟着复制了一堆新的object。就像用子列表替换'A'和'B'的元素,浅拷贝不会复制它们,但是深拷贝会复制这些对象。字典与列表一样,“字典”是许多值的集合。但与列表下标不同,字典索引可以使用许多不同的数据类型,而不仅仅是整数。字典的索引称为“键”,键及其关联的值称为“键值”对。所以可以说字典就是java中的Map。myCat={'size':'fat','color':'gray','disposition':'loud'}与列表不同,字典没有顺序的概念,所以不能通过操作索引获取元素,也不能使用Slices不能使用排序功能。操作字典的基本操作所以要操作字典,就需要另辟蹊径,使用函数keys()、values()和items()。顾名思义,就是获取字典的键值、val值、键值对。>>>spam={'color':'red','age':42}>>>forvinspam.values():print(v)red42>>>forkinspam.keys():print(k)colorage>>>foriinspam.items():print(i)('color','red')('age',42)值得一提的是spam.keys()获取元素Group,如果要得到对应的列表,需要使用列表函数进行转换。检查字典中是否存在key或value可以使用in或notin关键字判断数据是否在字典中。>>>spam={'name':'Zophie','age':7}>>>spam.keys()True中的'name'>>>spam.values()True中的'Zophie'>>>'color'inspam.keys()False>>>'color'notinspam.keys()True>>>'color'inspamFalseget()andsetdefault()方法get()可以通过key找到对应的value价值价值。get有两个参数,第一个参数是键值,第二个参数是键值对不存在(或者键不存在)时给出的默认值。>>>picnicItems={'apples':5,'cups':2}>>>'Iambringing'+str(picnicItems.get('cups',0))+'cups.''我要带2cups.'>>>'Iambringing'+str(picnicItems.get('eggs',0))+'eggs.''Iambring0eggs.'setdefault()有两个参数,第一个是key要插入的键值对的值,第二个是默认值。当键值存在于原始字典中时,什么都不做。如果键值在原始字典中不存在,则使用默认值作为值,与键组合成键值对插入到字典中。>>>spam={'name':'Pooka','age':5}>>>spam.setdefault('color','black')'black'>>>spam{'color':'black','age':5,'name':'Pooka'}>>>spam.setdefault('color','white')'black'>>>spam{'color':'black','age':5、'name':'Pooka'}字符串操作我们已经知道了字符串及其基本操作。学习完列表、元组、字典之后,再来看更丰富的字符串处理方法。转义字符与原字符和java相同,python也用于转义特殊字符。此外,还有原始字符r。您可以将r放在字符串开头的引号之前,使其成为原始字符串。“原始字符串”完全忽略所有转义字符,打印出字符串中的所有反斜杠。>>>print(r'那是卡罗尔的猫。')那是卡罗尔的猫。注释和多行字符Python单行注释可以使用特殊字符#,而多行注释可以使用“”。#Thisisaone-linecomment"""Thisisamulti-linecommentThisisamulti-linecommentThisisamulti-linecomment"""有时候我们在使用打印功能的时候,打印出来的字符串很长,为了页面好看,可以用'''把一个大字符串拆分成几行。print('''DearAlice,Eve'scathasbeenrappedforcatnapping,catburtlery,andextortion.Sincerely,Bob''')string下标和切片a字符串也可以看做列表,其中元素可以看成字符.所以你可以对字符串进行下标或者切片操作.同样的,你可以使用in和notin来判断一个字符是否在一个字符串上。>>>spam='Helloworld!'>>>垃圾邮件[0]'H'>>>垃圾邮件[4]'o'>>>垃圾邮件[-1]'!'>>>spam[0:5]'Hello'>>>spam[:5]'Hello'>>>spam[6:]'world!'一些字符串内置方法upper()字符串全部为大写lower()字符串全部为小写isupper()字符串至少有一个字母且所有字母均为大写islower()字符串至少有一个字母且所有字母均为小写)字符串只包含字母和非空isalnum()字符串只包含字母和数字,非空isdecimal()字符串只包含数字字符,非空isspace()字符串只包含空格、制表符和换行符,而非空的startswith()字符串就是这个方法传入的字符串以这个方法传入的字符串开始endswith()字符串,结束join()拼接的字符串。您可以指定分隔符。)rightpadding,如果输出数据不足,就补空格center()字符串居中,如果左右数据不足,就补空格结束woohoo,就算你已经通过了python的基本语法,当然这只是基础中的基础。有空再看看python是怎么处理多线程的,类的概念,内存管理等等。不忘初心。刚开始学习python,只是把它当成辅助语言,写小脚本之类的。没打算研究太深。毕竟时间有限。还有很多美好的事情等着我去体验。学以致用,写爬虫也是我学习python的一个动力。写了一个爬取豆瓣电影TOP250的小脚本。(看来这是爬虫入门的经典案例了,哈哈)utf-8")soup=BeautifulSoup(html,"lxml")divItems=soup.find_all("div","item")foritemindivItems:name=item.find('span',{'class':'title'}).textrating_num=item.find('span',{'class':'rating_num'}).textnumber=item.find('em').textimgUrl=item.find("img").attrs['src']print("------------>")print("number:"+number)numbers.append(number)print("name:"+name)names.append(name)print("rating_num:"+rating_num)rating_nums.append(rating_num)print("imgUrl:"+imgUrl)imgUrls.append(imgUrl)print("------------>")data_df=pd.DataFrame()numbers=[]names=[]rating_nums=[]imgUrls=[]fornumin范围(0,10):get_data(“https://movie.douban.com/top250?start={}&filter=".format(int(num)*25))data_df["sequence"]=numbersdata_df["name"]=namesdata_df["rating"]=rating_numsdata_df["Poster"]=imgUrlswriter=pd.ExcelWriter('movie_top250.xlsx')data_df.to_excel(writer,'page_1',float_format='%.5f')#float_format控制精度writer.save()当然需要安装该模块提前请求BeautifulSoup4pandasopenpyxllxml(BeautifulSoup4的解析器)结束