狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > python中title

網(wǎng)站性能檢測(cè)評(píng)分

注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問(wèn)題,僅供參考。

python中title

Python3中Selenium使用方法(連載) 企業(yè)視頻課程

img

繆凌柏

關(guān)注

歡迎關(guān)注天善智能,我們是專注于商業(yè)智能BI,大數(shù)據(jù),數(shù)據(jù)分析領(lǐng)域的垂直社區(qū),學(xué)習(xí),問(wèn)答、求職一站式搞定!

登陸天善社區(qū)查看更多系列:

Python3中BeautifulSoup的使用方法

Python3中PyQuery的使用方法

Python3中正則表達(dá)式使用方法

基本使用

首先我們來(lái)大體看一下Selenium有一些怎樣的功能,先用一段實(shí)例代碼來(lái)演示一下:

運(yùn)行代碼之后,如果正確配置好了ChromeDriver,可以發(fā)現(xiàn)會(huì)自動(dòng)彈出一個(gè)瀏覽器,瀏覽器首先會(huì)跳轉(zhuǎn)到百度,然后在搜索框中輸入Python進(jìn)行搜索,然后跳轉(zhuǎn)到搜索結(jié)果頁(yè),等待搜索結(jié)果加載出來(lái)之后,控制臺(tái)分別會(huì)輸出當(dāng)前的URL,當(dāng)前的Cookies還有網(wǎng)頁(yè)源代碼。

控制臺(tái)輸出結(jié)果:

源代碼過(guò)長(zhǎng)在此省略,那么當(dāng)前的URL,Cookies,源代碼都是瀏覽器中的真實(shí)內(nèi)容。所以說(shuō),如果我們用Selenium來(lái)驅(qū)動(dòng)瀏覽器加載網(wǎng)頁(yè)的話,我們就可以拿到JavaScrit渲染的結(jié)果了。

下面我們來(lái)詳細(xì)介紹一下Selenium的用法。

Selenium支持非常多的瀏覽器,如Chrome、Firefox、Edge等,還有手機(jī)端的瀏覽器Android、BlackBerry等,另外無(wú)界面瀏覽器PhantomJS也同樣支持。

我們可以用如下的方式初始化:

這樣我們就完成了一個(gè)瀏覽器對(duì)象的初始化,接下來(lái)我們要做的就是調(diào)用browser對(duì)象,讓其執(zhí)行各個(gè)動(dòng)作,就可以模擬瀏覽器操作了。

我們可以用get()方法來(lái)請(qǐng)求一個(gè)網(wǎng)頁(yè),參數(shù)傳入鏈接URL即可,比如在這里我們用get()方法訪問(wèn)淘寶,然后打印出源代碼,代碼如下:

單個(gè)元素

Selenium可以驅(qū)動(dòng)瀏覽器完成各種操作,比如填充表單,模擬點(diǎn)擊等等,比如我們想要完成向某個(gè)輸入框輸入文字的操作,總得需要知道這個(gè)輸入框在哪里吧?所以Selenium提供了一系列查找元素的方法,我們可以用這些方法來(lái)獲取想要的元素,以便于下一步執(zhí)行一些動(dòng)作或者提取信息。

比如我們想要從淘寶頁(yè)面中提取搜索框這個(gè)元素,首先觀察它的源代碼:

可以發(fā)現(xiàn)它的ID是q,Name也是q,還有許多其他屬性,我們獲取它的方式就有多種形式了,比如find_element_by_name()是根據(jù)Name值獲取,ind_element_by_id()是根據(jù)ID獲取,另外還有根據(jù)XPath、CSS Selector等獲取。

我們代碼實(shí)現(xiàn)一下:

在這里我們使用了三種方式獲取輸入框,根據(jù)ID,CSS Selector,和XPath獲取,它們返回的結(jié)果是完全一致的。

運(yùn)行結(jié)果:

可以看到三個(gè)元素都是WebElement類型,是完全一致的。

在這里列出所有獲取單個(gè)元素的方法:

find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector

另外Selenium還提供了通用的find_element()方法,它需要傳入兩個(gè)參數(shù),一個(gè)是查找的方式By,另一個(gè)就是值,實(shí)際上它就是find_element_by_id()這種方法的通用函數(shù)版本,比如find_element_by_id(id)就等價(jià)于find_element(By.ID, id)。

我們用代碼實(shí)現(xiàn)一下:

這樣的查找方式實(shí)際上功能和上面列舉的查找函數(shù)完全一致,不過(guò)參數(shù)更加靈活。

如果我們查找的目標(biāo)在網(wǎng)頁(yè)中只有一個(gè),那么完全可以用find_element()方法,但如果有多個(gè)元素,再用find_element()方法查找就只能得到第一個(gè)元素了,如果要查找所有滿足條件的元素,那就需要用find_elements()這樣的方法了,方法名稱中element多了一個(gè)s。

比如我們?cè)谶@里查找淘寶導(dǎo)航條的所有條目就可以這樣來(lái)寫:

在此簡(jiǎn)化了一下輸出結(jié)果,中間部分省略。

可以看到得到的內(nèi)容就變成了list類型,list的每個(gè)元素都是WebElement類型。

也就是說(shuō),如果我們用find_element()方法,只能獲取匹配的第一個(gè)元素,結(jié)果是WebElement類型,如果用find_elements()方法,則結(jié)果是list類型,listd每個(gè)元素是WebElement類型。

函數(shù)的列表如下:

find_elements_by_idfind_elements_by_namefind_elements_by_xpathfind_elements_by_link_textfind_elements_by_partial_link_textfind_elements_by_tag_namefind_elements_by_class_namefind_elements_by_css_selector

當(dāng)然我們和剛才一樣,也可可以直接find_elements()方法來(lái)選擇,所以也可以這樣來(lái)寫:

結(jié)果是完全一致的。

Selenium可以驅(qū)動(dòng)瀏覽器來(lái)執(zhí)行一些操作,也就是說(shuō)我們可以讓瀏覽器模擬執(zhí)行一些動(dòng)作,比較常見的用法有:

輸入文字用send_keys()方法,清空文字用clear()方法,另外還有按鈕點(diǎn)擊,用click()方法。

我們用一個(gè)實(shí)例來(lái)感受一下:

在這里我們首先驅(qū)動(dòng)瀏覽器打開淘寶,然后用find_element_by_id()方法獲取輸入框,然后用send_keys()方法輸入iPhone文字,等待一秒之后用clear()方法清空輸入框,再次調(diào)用send_keys()方法輸入iPad文字,之后再用find_element_by_class_name()方法獲取搜索按鈕,最后調(diào)用click()方法完成搜索動(dòng)作。

通過(guò)上面的方法我們就完成了一些常見元素的動(dòng)作操作,更多的操作可以參見官方文檔的交互動(dòng)作介紹:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement

在上面的實(shí)例中,一些交互動(dòng)作都是針對(duì)某個(gè)元素執(zhí)行的,比如輸入框我們就調(diào)用它的輸入文字和清空文字方法,按鈕就調(diào)用它的點(diǎn)擊方法,其實(shí)還有另外的一些操作它是沒(méi)有特定的執(zhí)行對(duì)象的。比如鼠標(biāo)拖拽,鍵盤按鍵等操作。所以這些動(dòng)作我們有另一種方式來(lái)執(zhí)行,那就是加到動(dòng)作鏈中。

比如我們現(xiàn)在實(shí)現(xiàn)一個(gè)元素拖拽操作,將某個(gè)元素從一處拖拽到另外一處,我們用代碼來(lái)感受一下:

首先我們打開網(wǎng)頁(yè)中的一個(gè)拖拽實(shí)例,然后依次選中要被拖拽的元素和拖拽到的目標(biāo)元素,然后聲明了ActionChains對(duì)象賦值為actions變量,然后通過(guò)調(diào)用actions變量的drag_and_drop()方法,然后再調(diào)用perform()方法執(zhí)行動(dòng)作,就完成了拖拽操作。

更多的動(dòng)作鏈操作可以參考官方文檔的動(dòng)作鏈介紹:http://selenium-python.readthedocs.io/api.html#module-selenium.webdrivermon.action_chains

另外對(duì)于某些操作,API沒(méi)有提供的,如下拉進(jìn)度條等,可以直接模擬運(yùn)行JavaScript,使用execute_script()方法。

在這里我們就利用了execute_script()方法將進(jìn)度條下拉到最底部,然后彈出alert提示框。

所以說(shuō)有了這個(gè),基本上API沒(méi)有提供的所有的功能都可以用執(zhí)行JavaScript的方式來(lái)實(shí)現(xiàn)了。

我們?cè)谇懊嬲f(shuō)過(guò)通過(guò)page_source屬性可以獲取網(wǎng)頁(yè)的源代碼,獲取源代碼之后就可以使用解析庫(kù)如正則、BeautifulSoup、PyQuery等來(lái)提取信息了。

不過(guò)既然Selenium已經(jīng)提供了選擇元素的方法,返回的是WebElement類型,那么它也有相關(guān)的方法和屬性來(lái)直接提取元素信息,如屬性、文本等等。這樣的話我們能就不用通過(guò)解析源代碼來(lái)提取信息了,非常方便。

那接下來(lái)我們就看一下可以通過(guò)怎樣的方式來(lái)獲取元素信息吧。

我們可以使用get_attribute()方法來(lái)獲取元素的屬性,那么這個(gè)的前提就是先選中這個(gè)元素。

我們用一個(gè)實(shí)例來(lái)感受一下:

運(yùn)行之后程序便會(huì)驅(qū)動(dòng)瀏覽器打開知乎的頁(yè)面,然后獲取知乎的LOGO元素,然后將它的class打印出來(lái)。

控制臺(tái)輸出結(jié)果:

我們通過(guò)get_attribute()方法,然后傳入想要獲取的屬性名,就可以得到它的值了。

每個(gè)WebEelement元素都有text屬性,我們可以通過(guò)直接調(diào)用這個(gè)屬性就可以得到元素內(nèi)部的文本信息了,就相當(dāng)于BeautifulSoup的get_text()方法、PyQuery的text()方法。

我們用一個(gè)實(shí)例來(lái)感受一下:

在這里們依然是先打開知乎頁(yè)面,然后獲取提問(wèn)按鈕這個(gè)元素,再將其文本值打印出來(lái)。

控制臺(tái)輸出結(jié)果:

另外WebElement元素還有一些其他的屬性,比如id屬性可以獲取元素id,location可以獲取該元素在頁(yè)面中的相對(duì)位置,tag_name可以獲取標(biāo)簽名稱 ,size可以獲取元素的大小,也就是寬高,這些屬性有時(shí)候還是很有用的。

我們用實(shí)例來(lái)感受一下:

在這里我們首先獲得了提問(wèn)按鈕這個(gè)元素,然后調(diào)用其id、location、tag_name、size屬性即可獲取對(duì)應(yīng)的屬性值。

我們知道在網(wǎng)頁(yè)中有這樣一種標(biāo)簽叫做iframe,也就是子Frame,相當(dāng)于頁(yè)面的子頁(yè)面,它的結(jié)構(gòu)和外部網(wǎng)頁(yè)的結(jié)構(gòu)是完全一致的。Selenium打開頁(yè)面后,它默認(rèn)是在父級(jí)Frame里面操作,而此時(shí)如果頁(yè)面中還有子Frame,它是不能獲取到子Frame里面的元素的。所以這時(shí)候我們就需要使用switch_to.frame()方法來(lái)切換Frame。

我們首先用一個(gè)實(shí)例來(lái)感受一下:

我們還是以上文演示動(dòng)作鏈操作的網(wǎng)頁(yè)為實(shí)例,首先我們通過(guò)switch_to.frame()方法切換到子Frame里面,然后我們嘗試獲取父級(jí)Frame里的LOGO元素,是不能找到的,找不到的話就會(huì)拋出NoSuchElementException異常,異常被捕捉之后就會(huì)輸出NO LOGO,接下來(lái)我們重新切換回父Frame,然后再次重新獲取元素,發(fā)現(xiàn)就可以成功獲取了。

所以,當(dāng)頁(yè)面中包含子Frame時(shí),如果我們想獲取子Frame中的元素,需要先調(diào)用switch_to.frame()方法切換到對(duì)應(yīng)的Frame,然后再進(jìn)行操作。

在Selenium中,get()方法會(huì)在網(wǎng)頁(yè)框架加載結(jié)束之后就結(jié)束執(zhí)行,此時(shí)如果獲取page_source可能并不是瀏覽器完全加載完成的頁(yè)面,如果某些頁(yè)面有額外的Ajax請(qǐng)求,我們?cè)诰W(wǎng)頁(yè)源代碼中也不一定能成功獲取到。所以這里我們需要延時(shí)等待一定時(shí)間確保元素已經(jīng)加載出來(lái)。

在這里等待的方式有兩種,一種隱式等待,一種顯式等待。

當(dāng)使用了隱式等待執(zhí)行測(cè)試的時(shí)候,如果Selenium沒(méi)有在DOM中找到元素,將繼續(xù)等待,超出設(shè)定時(shí)間后則拋出找不到元素的異常, 換句話說(shuō),當(dāng)查找元素而元素并沒(méi)有立即出現(xiàn)的時(shí)候,隱式等待將等待一段時(shí)間再查找 DOM,默認(rèn)的時(shí)間是0。

我們用一個(gè)實(shí)例來(lái)感受一下:

在這里我們用implicitly_wait()方法實(shí)現(xiàn)了隱式等待。

隱式等待的效果其實(shí)并沒(méi)有那么好,因?yàn)槲覀冎皇且?guī)定了一個(gè)固定時(shí)間,而頁(yè)面的加載時(shí)間是受到網(wǎng)絡(luò)條件影響的。

所以在這里還有一種更合適的顯式等待方法,它指定好要查找的元素,然后指定一個(gè)最長(zhǎng)等待時(shí)間。如果在規(guī)定時(shí)間內(nèi)加載出來(lái)了這個(gè)元素,那就返回查找的元素,如果到了規(guī)定時(shí)間依然沒(méi)有加載出該元素,則會(huì)拋出超時(shí)異常。

我們用一個(gè)實(shí)例來(lái)感受一下:

在這里我們首先引入了WebDriverWait這個(gè)對(duì)象,指定好最長(zhǎng)等待時(shí)間,然后調(diào)用它的until()方法,傳入要等待條件expected_conditions,比如在這里我們傳入了presence_of_element_located這個(gè)條件,就代表元素出現(xiàn)的意思,其參數(shù)是元素的定位元組,也就是ID為q的元素搜索框。

所以這樣可以做到的效果就是,在10秒內(nèi)如果ID為q的元素即搜索框成功加載出來(lái)了,那就返回該元素,如果超過(guò)10秒還沒(méi)有加載出來(lái),那就拋出異常。

對(duì)于按鈕,可以更改一下等待條件,比如改為element_to_be_clickable,也就是可點(diǎn)擊,所以查找按鈕時(shí)是查找CSS選擇器為.btn-search的按鈕,如果10秒內(nèi)它是可點(diǎn)擊的也就是成功加載出來(lái)了,那就返回這個(gè)按鈕元素,如果超過(guò)10秒還不可點(diǎn)擊,也就是沒(méi)有加載出來(lái),那就拋出異常。

運(yùn)行代碼,在網(wǎng)速較佳的情況下是可以成功加載出來(lái)的。

控制臺(tái)輸出:

可以看到控制臺(tái)成功輸出了兩個(gè)元素,都是WebElement類型。

如果網(wǎng)絡(luò)有問(wèn)題,10秒內(nèi)沒(méi)有成功加載,那就拋出TimeoutException,控制臺(tái)輸出如下:

關(guān)于等待條件,其實(shí)還有很多,比如判斷標(biāo)題內(nèi)容,判斷某個(gè)元素內(nèi)是否出現(xiàn)了某文字,在這里將所有的加載條件列舉如下:

等待條件含義

title_is標(biāo)題是某內(nèi)容

title_contains標(biāo)題包含某內(nèi)容

presence_of_element_located元素加載出,傳入定位元組,如(By.ID, 'p')

visibility_of_element_located元素可見,傳入定位元組

visibility_of可見,傳入元素對(duì)象

presence_of_all_elements_located所有元素加載出

text_to_be_present_in_element某個(gè)元素文本包含某文字

text_to_be_present_in_element_value某個(gè)元素值包含某文字

frame_to_be_available_and_switch_to_it frame加載并切換

invisibility_of_element_located元素不可見

element_to_be_clickable元素可點(diǎn)擊

staleness_of判斷一個(gè)元素是否仍在DOM,可判斷頁(yè)面是否已經(jīng)刷新

element_to_be_selected元素可選擇,傳元素對(duì)象

element_located_to_be_selected元素可選擇,傳入定位元組

element_selection_state_to_be傳入元素對(duì)象以及狀態(tài),相等返回True,否則返回False

element_located_selection_state_to_be傳入定位元組以及狀態(tài),相等返回True,否則返回False

alert_is_present是否出現(xiàn)Alert

更多詳細(xì)的等待條件的參數(shù)及用法介紹可以參考官方文檔:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

我們平常使用瀏覽器都有前進(jìn)和后退功能,使用Selenium也可以完成這個(gè)操作,使用back()方法可以后退,forward()方法可以前進(jìn)。

我們用一個(gè)實(shí)例來(lái)感受一下:

在這里我們連續(xù)訪問(wèn)三個(gè)頁(yè)面,然后調(diào)用back()方法就可以回到第二個(gè)頁(yè)面,接下來(lái)再調(diào)用forward()方法又可以前進(jìn)到第三個(gè)頁(yè)面。

使用Selenium還可以方便地對(duì)Cookies進(jìn)行操作,例如獲取、添加、刪除Cookies等等。

我們?cè)儆脤?shí)例來(lái)感受一下:

首先我們?cè)L問(wèn)了知乎,然后加載完成之后,瀏覽器實(shí)際上已經(jīng)生成了Cookies了,我們調(diào)用get_cookies()方法就可以獲取所有的Cookies,然后我們添加一個(gè)C...

六、python中字符串的常用方法 企業(yè)視頻課程

img

黛兒

關(guān)注

1.capitalize()方法

s = 'jack and tom and jack''''capitalize() 方法:Return a capitalized version of the string. ---> 返回字符串的大寫版本More specifically, make the first character have upper case and the rest lower case. --->更具體的說(shuō),使第一個(gè)字符具有大寫字母,其余字母為小寫字母'''print(s.capitalize())

2.title()方法

'''title() 方法:Return a version of the string where each word is titlecased.--> 返回一個(gè)字符串,其中每個(gè)單詞的首字母大寫More specifically, words start with uppercased characters and all remainingcased characters have lower case. -->更具體的說(shuō),每個(gè)單詞以大寫字母開始,其余都是小寫字母'''print('abc*abc'.title())

3.center()方法

'''center() 方法:Return a centered string of length width.-->返回長(zhǎng)度為寬度的居中字符串。Padding is done using the specified fill character (default is a space).-->填充是使用指定的填充字符完成的(默認(rèn)為空格)'''print('abc'.center(9,'-'))

4.count()方法

'''count() 方法:S.count(sub[, start[, end]]) -> intReturn the number of non-overlapping occurrences of substring sub in string S[start:end]. Optional arguments start and end are interpreted as in slice notation.查找子字符串 sub 在字符串中出現(xiàn)的次數(shù),可選參數(shù),開始 和 結(jié)束 可理解為切片'''print(s.count('and',1,3))

5.endswith()方法

'''endswith() 方法:S.endswith(suffix[, start[, end]]) -> boolReturn True if S ends with the specified suffix, False otherwise. With optional start, test S beginning at that position. With optional end, stop comparing S at that position. suffix can also be a tuple of strings to try.如果S以指定后綴結(jié)尾,則返回True,否則返回False。可以指定起始和結(jié)束位置,后綴也可以是要嘗試的字符串元組。 '''print('tom and jack'.endswith('jack',10))

6.find()方法

'''find() 方法:S.find(sub[, start[, end]]) -> intReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end]. Optional arguments start and end are interpreted as in slice notation.在字符串 S 中查找子字符串sub,如果找到,返回子字符串sub在字符串s中首次出現(xiàn)的索引,沒(méi)有找到返回 -1參數(shù)start 和 end 可以理解為切片'''print('hello world python'.find('world',6))print('hello world python'.find('world',6))

7.format()方法:

'''format() 方法:S.format(*args, **kwargs) -> strReturn a formatted version of S, using substitutions from args and kwargs.The substitutions are identified by braces ('{' and '}').使用來(lái)自args和kwargs的替換返回S的格式化版本。替換用大括號(hào)(“{”和“}”)標(biāo)識(shí)。'''s_format = '我的名字叫{},我的年齡是{}'.format('jack',19)print(s_format)s_format = '我的名字叫{name},我的年齡是{age},我的名字叫{name}'.format(name='jack',age=19)print(s_format)s_format = '我的名字叫{0},我的年齡是{1},我的名字叫{0}'.format('jack',19)print(s_format)

8.index()方法

'''index() 方法:S.index(sub[, start[, end]]) -> intReturn the lowest index in S where substring sub is found, such that sub is contained within S[start:end]. Optional arguments start and end are interpreted as in slice notation. Raises ValueError when the substring is not found.在字符串 s 中查找 子字符串 sub,在指定位置 start 和 end 之間查找,參數(shù) start 和 end 可理解為切片,如果沒(méi)有找到,則會(huì)拋出 ValueError錯(cuò)誤。找到,返回最先出現(xiàn)的索引'''s_index = 'return the lowest index in S where'print(s_index.index('the'))

9.lower()方法:

'''lower() 方法:Return a copy of the string converted to lowercase.返回轉(zhuǎn)換為小寫的字符串副本。將字符串中的所有字符轉(zhuǎn)換成小寫字母'''print('AbCdddEfgjKH'.lower())

10.lstrip()方法:

'''lstrip() 方法:Return a copy of the string with leading whitespace removed. 返回一個(gè)刪除前導(dǎo)(左側(cè))空白字符的副本。 If chars is given and not None, remove characters in chars instead. 如果這個(gè)字符chars是給定的,而不是None,則刪除指定的字符,而不是空白字符'''print(' abdde'.lstrip())print('***abdcd'.lstrip('*'))

11.replace()方法:

'''replace() 方法:Return a copy with all occurrences of substring old replaced by new.返回一個(gè)字符串的副本,使用新的子字符串替換舊的子字符串count Maximum number of occurrences to replace. -1 (the default value) means replace all occurrences. 替換的次數(shù),默認(rèn)為-1 ,表示替換所有的子字符串If the optional argument count is given, only the first count occurrences are replaced.如果參數(shù)count給定的指定次數(shù)。則替換指定的次數(shù)'''print('abcabdabcabc'.replace('a','A',3))

12.split()方法:

'''split()方法:Return a list of the words in the string, using sep as the delimiter string. 將字符串使用指定分隔符進(jìn)行拆分,并返回一個(gè)list sep 用作拆分的分隔符 The delimiter according which to split the string. None (the default value) means split according to any whitespace, and discard empty strings from the result. 參數(shù)為空,默認(rèn)使用空白字符進(jìn)行拆分,返回的結(jié)果中拋棄空白字符 maxsplit 表示要執(zhí)行的最大拆分 Maximum number of splits to do. -1 (the default value) means no limit. 表示要執(zhí)行的最大拆分次數(shù),-1 默認(rèn)值,表示沒(méi)有限制'''print('Maximum number of splits to do'.split())

13.rstrip()方法

'''rstrip() 方法:去掉字符串右邊的字符,默認(rèn)去掉空白字符,同 lstrip()方法'''print('abc***'.rstrip('*'))'''startswith() 方法: S.startswith(prefix[, start[, end]]) -> boolReturn True if S starts with the specified prefix, False otherwise.With optional start, test S beginning at that position. With optional end, stop comparing S at that position. prefix can also be a tuple of strings to try. 如果以指定的字符串開頭,則返回True,否則返回False. 同endswith()方法類似'''print('abc'.startswith('a'))

14.strip()方法

'''strip()方法: 同rstrip() 和 lstrip() 方法。去掉字符串首尾的空白字符,或者指定字符'''print('*%abc%'.strip('*%'))

15.upper()方法

'''upper()方法:Return a copy of the string converted to uppercase.將字符串中的所有字符轉(zhuǎn)換成大寫字母,并返回一個(gè)字符串副本 同lower()方法對(duì)應(yīng)'''print('abcdaAKJFA'.upper())

Kaggle首次定義數(shù)據(jù)科學(xué)家:30歲,年薪5萬(wàn)刀,愛Python,最恨臟數(shù)據(jù) 公司視頻課程

img

詹姆士

關(guān)注

大數(shù)據(jù)文摘作品

作者:龍牧雪 魏子敏

今日凌晨,全球最大的數(shù)據(jù)科學(xué)社群Kaggle發(fā)布了第一份數(shù)據(jù)科學(xué)/機(jī)器學(xué)習(xí)業(yè)界現(xiàn)狀調(diào)查報(bào)告。這份調(diào)查問(wèn)卷的受訪者囊括了來(lái)自50多個(gè)國(guó)家的16,000+位從業(yè)者,根據(jù)他們的問(wèn)卷結(jié)果,Kaggle給出了一些有趣的結(jié)論:

1、Python可能是機(jī)器學(xué)習(xí)最常用的編程語(yǔ)言,而統(tǒng)計(jì)學(xué)家更多地使用R語(yǔ)言;

2、數(shù)據(jù)科學(xué)家的年齡中位數(shù)是30歲,而各國(guó)差異巨大,比如,印度的受訪人比澳大利亞平均年齡年輕9歲;

3、受訪者中碩士學(xué)位所占比重最大,但薪水最高的從業(yè)者($150k)多數(shù)擁有博士學(xué)位。

本次報(bào)告的發(fā)布也別具一格地采用了交互數(shù)據(jù)集的方式,并提供了樣本數(shù)據(jù)集供讀者自行分析,大數(shù)據(jù)文摘也得以利用這一數(shù)據(jù)集分析出了一些與中國(guó)數(shù)據(jù)科學(xué)從業(yè)者相關(guān)的結(jié)論,比如:

1、中國(guó)從業(yè)者更年輕:中國(guó)數(shù)據(jù)玩家年齡中位數(shù)25歲,比這一統(tǒng)計(jì)值的全球數(shù)據(jù)(30歲)小五歲;

2、從業(yè)者男女比例更加不均:中國(guó)僅有72名女性數(shù)據(jù)玩家填寫了問(wèn)卷,而男性有387人。男女比5.4:1;

關(guān)注大數(shù)據(jù)文摘,在公眾號(hào)后臺(tái)對(duì)話框內(nèi)回復(fù)“Kaggle”,即可直接下載這份數(shù)據(jù)集自己玩~

Kaggle同時(shí)為這份數(shù)據(jù)集設(shè)置了1000美金的獎(jiǎng)項(xiàng),如果你有新發(fā)現(xiàn),可以將自己的分析上傳至Kaggle,地址

https://kaggle/kaggle/kaggle-survey-2017

以下為報(bào)告精華:

數(shù)據(jù)科學(xué)從業(yè)者畫像

定義數(shù)據(jù)科學(xué)從業(yè)者的方式很多,Kaggle將從工作和背景的兩個(gè)方向進(jìn)行統(tǒng)計(jì):

“你的年齡多大?”

平均來(lái)看,問(wèn)卷調(diào)查填寫者的年齡中位數(shù)在30歲左右,但不同國(guó)家的這一數(shù)值也不盡相同,比如印度的受訪者就比澳大利亞年輕9歲。

中國(guó)數(shù)據(jù)玩家年齡中位數(shù)盡管高于印度,但仍然低于全球平均值,只有25歲。

“你的性別是什么?”

在性別這一欄,這份報(bào)告給了我們比較符合預(yù)期的結(jié)論,男女比例不均。

在全球的問(wèn)卷填寫者中,共有13427位男性和2714位女性,男女比4.9:1。

而在中國(guó),僅有72名女性數(shù)據(jù)玩家填寫了問(wèn)卷,而男性有387人。男女比5.4:1。

“你的就業(yè)情況如何?”

數(shù)據(jù)科學(xué)從業(yè)者的崛起讓自由職業(yè)者和兼職工作成為一種新潮流,而這一報(bào)告也應(yīng)證了這一結(jié)論。在全球,僅有65%的數(shù)據(jù)玩家擁有全職工作,而8%是自由職業(yè)。

相較之下,中國(guó)回答者的“沒(méi)有工作也不在找工作”的比例非常高(考慮到中國(guó)的回答者人數(shù)較少-只有400人,文摘菌認(rèn)為這個(gè)結(jié)果可能是學(xué)生比例較高造成的)。

“你的職位是什么?”

自從“數(shù)據(jù)科學(xué)家”被譽(yù)為全球最性感的職位后,這個(gè)職位也成為了很多從業(yè)者的奮斗目標(biāo)。而從調(diào)查結(jié)果看,全球范圍內(nèi),使用“數(shù)據(jù)科學(xué)家”作為自己Title的從業(yè)者比例最高,占到24.4%。

“你的年薪是多少?”

如果看薪酬,最高一級(jí)薪酬是年收入20萬(wàn)美元以上,這一檔全球有166人,相對(duì)于不分薪酬的數(shù)據(jù)科學(xué)家比例(24.4%),數(shù)據(jù)科學(xué)家比例有顯著提升(35.5%)。

全球數(shù)據(jù)相關(guān)從業(yè)者平均年薪55441美元(約合37萬(wàn)人民幣)。

收入上也有男女不均:男性比女性多收入3000美金/年。

中國(guó)數(shù)據(jù)相關(guān)從業(yè)者平均年薪29835美元(約合20萬(wàn)人民幣)??紤]到只有66人回答了這一問(wèn)題,結(jié)果解讀需謹(jǐn)慎。

“你的最高學(xué)歷是什么?”

全球范圍內(nèi),取得碩士學(xué)位的從業(yè)者最多。

按薪酬來(lái)看,年薪150k-200k美金和200k+美金的人群多數(shù)取得了博士學(xué)位。

這一題中國(guó)有420人回答,仍是取得碩士學(xué)位的人最多且比例和全球水平接近。博士的比例(11.2%)比全球(15.6%)少。

數(shù)據(jù)科學(xué)從業(yè)者日常工作內(nèi)容

Kaggle給數(shù)據(jù)科學(xué)家的定義是,“寫代碼并且分析數(shù)據(jù)的人群”。通過(guò)問(wèn)詢問(wèn)卷填寫者的日常工作,報(bào)告得到了如下結(jié)論:

“你的工作中用到哪些數(shù)據(jù)科學(xué)方法?”

邏輯回歸在數(shù)據(jù)科學(xué)從業(yè)者中最常被用到,占63.5%。

“工作中最常用到的工具?”

python python python

但職位是“統(tǒng)計(jì)學(xué)家”的人還是顯著地喜歡用R。

“工作中常用的數(shù)據(jù)類型是?”

工作中用到的數(shù)據(jù)主要是關(guān)系型數(shù)據(jù),主要使用Git共享代碼。

“工作中遇到的最大的困難?”

臟數(shù)據(jù)!看來(lái)數(shù)據(jù)科學(xué)領(lǐng)域最大的問(wèn)題還是臟數(shù)據(jù)。排名第二的困難是“缺少數(shù)據(jù)科學(xué)人才”。正在學(xué)習(xí)數(shù)據(jù)科學(xué)的小伙伴們,你們前途無(wú)量呀!請(qǐng)帶文摘菌一起飛!

新手如何入行數(shù)據(jù)科學(xué)領(lǐng)域?

作為一個(gè)數(shù)據(jù)科學(xué)學(xué)習(xí)社區(qū),Kaggle在這份報(bào)告中也提出了一些數(shù)據(jù)科學(xué)老司機(jī)給新手學(xué)習(xí)者的建議,可以說(shuō)是非常良心了!(這一部分可能是本份報(bào)告中最有價(jià)值的部分,文摘菌敲黑板劃重點(diǎn)啦?。?/p>

“你們會(huì)推薦新手先學(xué)哪門語(yǔ)言?”

先學(xué)Python!這是Kaggle綜合了超一萬(wàn)名老司機(jī)的意見給出的結(jié)論。

“你最常使用哪種數(shù)據(jù)科學(xué)學(xué)習(xí)資源?”

數(shù)據(jù)科學(xué)是一個(gè)日新月異的領(lǐng)域,保持持續(xù)的學(xué)習(xí)能力非常重要。據(jù)調(diào)研問(wèn)卷顯示,數(shù)據(jù)科學(xué)老司機(jī)最常用到的學(xué)習(xí)資源包括Stack Overflow Q&A,相關(guān)論壇,以及Podcasts。而關(guān)于開源內(nèi)容,數(shù)據(jù)科學(xué)從業(yè)者更多使用官方文檔和觀看 Youtube 視頻。

“你從何獲取開源數(shù)據(jù)?”

沒(méi)有數(shù)據(jù)就沒(méi)有數(shù)據(jù)科學(xué),所以提到數(shù)據(jù)科學(xué)學(xué)習(xí)技能,不得不提到獲取開源優(yōu)質(zhì)數(shù)據(jù)的能力。報(bào)告中提到了一些優(yōu)質(zhì)數(shù)據(jù)獲取渠道,包括Dataset aggregator, Google Search等。

“怎么找工作?”

數(shù)據(jù)科學(xué)從業(yè)老司機(jī)在找工作上的忠告也非常有趣:去公司官網(wǎng)或相關(guān)網(wǎng)站的技術(shù)板塊乃下下策,他們更建議的方式是,直接聯(lián)系招聘人,或建立自己的關(guān)系網(wǎng)。

最后,對(duì)所有正在閱讀問(wèn)卷結(jié)果的人,文摘菌想特意說(shuō)明Kaggle在問(wèn)卷中備注的一句話:每個(gè)人都是獨(dú)特的,不是一個(gè)個(gè)平均數(shù)就能代表的。問(wèn)卷的結(jié)論建立在1.6萬(wàn)名Kaggle使用者的答案上,但他們只是數(shù)據(jù)從業(yè)者的一小部分——年齡、性別、所在地區(qū)、職位、薪酬、經(jīng)驗(yàn)和所受教育的不同都無(wú)法阻止我們對(duì)數(shù)據(jù)科學(xué)的熱愛!

python用正則爬取豆瓣電影排行榜,連老司機(jī)都不知道的奧秘 推廣視頻課程

img

負(fù)荷

關(guān)注

使用了tkinter做了簡(jiǎn)單頁(yè)面

首先分析要爬取的url, 發(fā)現(xiàn)每個(gè)頁(yè)面有25條內(nèi)容, 總共有十頁(yè), 第一頁(yè)的URL為https://movie.douban/top250?start=0&filter=

第二頁(yè)的url為https://movie.douban/top250?start=25&filter=

第三頁(yè)第四頁(yè)也是類似的URL, 只是修改了start后面的數(shù)字, 第一頁(yè)是0, 往后每增加25, 所以u(píng)rl的格式為https://movie.douban/top250?start=+{ID}

然后分析如何爬取內(nèi)容:

首先爬取標(biāo)題:

查看源代碼后, 發(fā)現(xiàn)標(biāo)題是放在這樣的代碼:

肖申克的救贖 / The Shawshank Redemption / 月黑高飛(港) / 刺激1995(臺(tái))12345發(fā)現(xiàn)電影的名稱一般都放在

電影名稱1這樣的標(biāo)記對(duì)中, 所以根據(jù)這個(gè)可以寫出正則表達(dá)式:

(.*?)1不過(guò)在后面的測(cè)試中發(fā)現(xiàn)這樣寫的話, 每個(gè)電影名稱能獲取兩個(gè)信息

肖申克的救贖 / The Shawshank Redemption12顯然第二條信息不是我們想要的, 經(jīng)過(guò)對(duì)比發(fā)現(xiàn)第二條信息中都會(huì)有兩個(gè)空格的代碼, 所以把&給過(guò)濾掉就可以了:

(.[^&]*?)1接下來(lái)爬取評(píng)分, 評(píng)分一般放在這樣的代碼中:

9.6716019人評(píng)價(jià)

123456這個(gè)正則就很好寫了:

"v:average">(.*?)1這樣就ok啦, 這個(gè)程序還是非常簡(jiǎn)單的, 上源代碼:

# -*- coding: utf-8 -*-from Tkinter import *from ScrolledText import ScrolledTextimport requests, re, threadingdef replite(ID): varl.set('正在獲取第%d頁(yè)內(nèi)容' % (ID / 25 + 1)) html = 'https://movie.douban/top250?start=' + str(ID) response = requests.get(html).text # response = unicode(response, 'GBK').encode('UTF-8') response = response.encode('utf-8 ') # print response # reg = r'(.*?).*?"v:average">(.*?)' regTitle = r'(.[^&]*?)' regStars = r'.*?"v:average">(.*?)' regTitle = repile(regTitle) regStars = repile(regStars) titles = re.findall(regTitle, response) stars = re.findall(regStars, response) info = list(zip(titles, stars)) return infodef write(): varl.set('開始爬取內(nèi)容') ID = 0 nums = 1 while ID < 250: res = replite(ID) ID += 25 for each in res: text.insert(END, 'No.%d\t%-30s%s分\n' % (nums, each[0], each[1])) nums += 1 varl.set('獲取內(nèi)容成功')def start(): t1 = threading.Thread(target=write) t1.start()def save(): content = text.get("0.0", "end").encode('GBK') textfile = open(u'E:\\豆瓣電影排行250.txt', 'w') textfile.write(content) textfile.close()root = Tk()root.title('豆瓣電影top250')root.geometry('820x500+400+200')text = ScrolledText(root, font=('楷體', 15), width=80, height=20)text.grid()frame = Frame(root)frame.grid()# 啟動(dòng)爬蟲功能startButton = Button(frame, text='開始', font=('楷體', 18), command=start)startButton.grid()startButton.pack(side=LEFT)# 保存爬取信息saveButton = Button(frame, text='保存文件', font=('楷體', 18), command=save)saveButton.grid()saveButton.pack(side=LEFT)# 退出程序exitButton = Button(frame, text='退出', font=('楷體', 18), command=frame.quit)exitButton.grid()exitButton.pack(side=LEFT)varl = StringVar()info_label = Label(root, fg='red', textvariable=varl)info_label.grid()varl.set('準(zhǔn)備中....')root.mainloop()

下面給大家分享python正則詳解:

正則表達(dá)式是一個(gè)很強(qiáng)大的字符串處理工具,幾乎任何關(guān)于字符串的操作都可以使用正則表達(dá)式來(lái)完成,作為一個(gè)爬蟲工作者,每天和字符串打交道,正則表達(dá)式更是不可或缺的技能,正則表達(dá)式的在不同的語(yǔ)言中使用方式可能不一樣,不過(guò)只要學(xué)會(huì)了任意一門語(yǔ)言的正則表達(dá)式用法,其他語(yǔ)言中大部分也只是換了個(gè)函數(shù)的名稱而已,本質(zhì)都是一樣的。下面,我來(lái)介紹一下python中的正則表達(dá)式是怎么使用的。

首先,python中的正則表達(dá)式大致分為以下幾部分:

元字符模式函數(shù)re 內(nèi)置對(duì)象用法分組用法環(huán)視用法  所有關(guān)于正則表達(dá)式的操作都使用 python 標(biāo)準(zhǔn)庫(kù)中的 re 模塊。

一、元字符 (參見 python 模塊 re 文檔)

. 匹配任意字符(不包括換行符)^ 匹配開始位置,多行模式下匹配每一行的開始$ 匹配結(jié)束位置,多行模式下匹配每一行的結(jié)束* 匹配前一個(gè)元字符0到多次+ 匹配前一個(gè)元字符1到多次? 匹配前一個(gè)元字符0到1次{m,n} 匹配前一個(gè)元字符m到n次\\ 轉(zhuǎn)義字符,跟在其后的字符將失去作為特殊元字符的含義,例如\\.只能匹配.,不能再匹配任意字符[] 字符集,一個(gè)字符的集合,可匹配其中任意一個(gè)字符| 邏輯表達(dá)式 或 ,比如 a|b 代表可匹配 a 或者 b(...) 分組,默認(rèn)為捕獲,即被分組的內(nèi)容可以被單獨(dú)取出,默認(rèn)每個(gè)分組有個(gè)索引,從 1 開始,按照"("的順序決定索引值(?iLmsux) 分組中可以設(shè)置模式,iLmsux之中的每個(gè)字符代表一個(gè)模式,用法參見 模式 I(?:...) 分組的不捕獲模式,計(jì)算索引時(shí)會(huì)跳過(guò)這個(gè)分組(?P...) 分組的命名模式,取此分組中的內(nèi)容時(shí)可以使用索引也可以使用name(?P=name) 分組的引用模式,可在同一個(gè)正則表達(dá)式用引用前面命名過(guò)的正則(?#...) 注釋,不影響正則表達(dá)式其它部分,用法參見 模式 I(?=...) 順序肯定環(huán)視,表示所在位置右側(cè)能夠匹配括號(hào)內(nèi)正則(?!...) 順序否定環(huán)視,表示所在位置右側(cè)不能匹配括號(hào)內(nèi)正則(?<=...) 逆序肯定環(huán)視,表示所在位置左側(cè)能夠匹配括號(hào)內(nèi)正則(?

I IGNORECASE, 忽略大小寫的匹配模式, 樣例如下

s = 'hello World!'regex = repile("hello world!", re.I)print regex.match(s).group()#output> 'Hello World!'#在正則表達(dá)式中指定模式以及注釋regex = repile("(?#注釋)(?i)hello world!")print regex.match(s).group()#output> 'Hello World!'

L LOCALE, 字符集本地化。這個(gè)功能是為了支持多語(yǔ)言版本的字符集使用環(huán)境的,比如在轉(zhuǎn)義符\w,在英文環(huán)境下,它代表[a-zA-Z0-9_],即所以英文字符和數(shù)字。如果在一個(gè)法語(yǔ)環(huán)境下使用,缺省設(shè)置下,不能匹配"é" 或 "04"。加上這L選項(xiàng)和就可以匹配了。不過(guò)這個(gè)對(duì)于中文環(huán)境似乎沒(méi)有什么用,它仍然不能匹配中文字符。M MULTILINE,多行模式, 改變 ^ 和 $ 的行為

s = '''first linesecond linethird line'''# ^regex_start = repile("^\w+")print regex_start.findall(s)# output> ['first']regex_start_m = repile("^\w+", re.M)print regex_start_m.findall(s)# output> ['first', 'second', 'third']#$regex_end = repile("\w+$")print regex_end.findall(s)# output> ['line']regex_end_m = repile("\w+$", re.M)print regex_end_m.findall(s)# output> ['line', 'line', 'line']

S  DOTALL,此模式下 '.' 的匹配不受限制,可匹配任何字符,包括換行符

s = '''first linesecond linethird line'''#regex = repile(".+")print regex.findall(s)# output> ['first line', 'second line', 'third line']# re.Sregex_dotall = repile(".+", re.S)print regex_dotall.findall(s)# output> ['first line\nsecond line\nthird line']

X VERBOSE,冗余模式, 此模式忽略正則表達(dá)式中的空白和#號(hào)的注釋,例如寫一個(gè)匹配郵箱的正則表達(dá)式email_regex = repile("[\w+\.]+@[a-zA-Z\d]+\.(com|cn)")email_regex = repile("""[\w+\.]+ # 匹配@符前的部分 @ # @符 [a-zA-Z\d]+ # 郵箱類別 \.(com|cn) # 郵箱后綴 """, re.X)U UNICODE,使用 \w, \W, \b, \B 這些元字符時(shí)將按照 UNICODE 定義的屬性.正則表達(dá)式的模式是可以同時(shí)使用多個(gè)的,在 python 里面使用按位或運(yùn)算符 | 同時(shí)添加多個(gè)模式

如 repile('', re.I|re.M|re.S)

每個(gè)模式在 re 模塊中其實(shí)就是不同的數(shù)字

print re.I# output> 2print re.L# output> 4print re.M# output> 8print re.S# output> 16print re.X# output> 64print re.U# output> 32四、re 內(nèi)置對(duì)象用法

SRE_Pattern 這個(gè)對(duì)象是一個(gè)編譯后的正則表達(dá)式,編譯后不僅能夠復(fù)用和提升效率,同時(shí)也能夠獲得一些其他的關(guān)于正則表達(dá)式的信息屬性:

flags 編譯時(shí)指定的模式groupindex 以正則表達(dá)式中有別名的組的別名為鍵、以該組對(duì)應(yīng)的編號(hào)為值的字典,沒(méi)有別名的組不包含在內(nèi)。groups 正則表達(dá)式中分組的數(shù)量

pattern 編譯時(shí)用的正則表達(dá)式s = 'Hello, Mr.Gumby : 2016/10/26'p = repile('''(?: # 構(gòu)造一個(gè)不捕獲分組 用于使用 | (?P\w+\.\w+) # 匹配 Mr.Gumby | # 或 (?P\s+\.\w+) # 一個(gè)匹配不到的命名分組 ) .*? # 匹配 : (\d+) # 匹配 2016 ''', re.X)

好了,今天的知識(shí)就分享到這里,歡迎關(guān)注愛編程的南風(fēng),私信關(guān)鍵詞:學(xué)習(xí)資料,獲取更多學(xué)習(xí)資源,如果文章對(duì)你有有幫助,請(qǐng)收藏關(guān)注,在今后與你分享更多學(xué)習(xí)python的文章。同時(shí)歡迎在下面評(píng)論區(qū)留言如何學(xué)習(xí)python。

Python基礎(chǔ)學(xué)習(xí)之常用六大數(shù)據(jù)類型 流量視頻課程

img

子日

關(guān)注

剛開始學(xué)習(xí)一門編程語(yǔ)言,除了了解運(yùn)行環(huán)境與語(yǔ)言類型之外,最基本還是從該語(yǔ)言的基本數(shù)據(jù)類型開始學(xué)起。

Python六大常用數(shù)據(jù)類型:

int 整數(shù) float 浮點(diǎn)數(shù) str 字符串 list 列表 tuple 元組 dict 字典

講解這些先說(shuō)一下python中的變量與變量名。

變量其實(shí)本質(zhì)上是一個(gè)具有特殊格式的內(nèi)存,變量名則是指向這個(gè)內(nèi)存的別名。python中的變量不需要聲明,所有的變量必須賦值了才能使用。賦值的步驟:

a = 100

第一步:準(zhǔn)備好值100第二部:準(zhǔn)備好變量名a第三部:將值與名字進(jìn)行關(guān)聯(lián)

一、整數(shù)python將其他一些靜態(tài)語(yǔ)言中的int、long,也就是整型和長(zhǎng)整型合并為了一個(gè)。python中的int是邊長(zhǎng)的,也就是說(shuō)可以存儲(chǔ)無(wú)限大的整數(shù),但是這是不現(xiàn)實(shí)的,因?yàn)闆](méi)有這么多的內(nèi)存夠分配。整型不僅支持十進(jìn)制,還支持二進(jìn)制、八進(jìn)制、十六進(jìn)制??梢酝ㄟ^(guò)下面的方式來(lái)互相轉(zhuǎn)換:

print(bin(20)) #轉(zhuǎn)換二進(jìn)制print(oct(20)) #轉(zhuǎn)換八進(jìn)制print(hex(20)) #轉(zhuǎn)換十六進(jìn)制

二、浮點(diǎn)型浮點(diǎn)數(shù)也就是小數(shù),如22.1,44.2,也可以使用科學(xué)計(jì)數(shù)法,比如:1.22e8。python支持對(duì)整數(shù)和浮點(diǎn)數(shù)直接進(jìn)行四則混合運(yùn)算。整數(shù)運(yùn)算結(jié)果仍然是整數(shù),浮點(diǎn)數(shù)運(yùn)算結(jié)果仍然是浮點(diǎn)數(shù),但整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算的結(jié)果就變成浮點(diǎn)數(shù)了。

a = 1b = 1.1print(type(a+b)) #

三、字符串字符串在任何編程語(yǔ)言中都是最常用的數(shù)據(jù)類型。字符串的創(chuàng)建很簡(jiǎn)單,也是上面所說(shuō)的三步,但是要加上單引號(hào)或者雙引號(hào)。

a = "hello python"

也可以使用 “”" 創(chuàng)建多行字符串:

a = """ hello python"""

字符串可以通過(guò)下面方式進(jìn)行截取或者連接:

print (str[0:4]) 輸出第一個(gè)到倒數(shù)第四個(gè)的所有字符 print (str[0]) 輸出單字符 第1個(gè)字符print (str[3:]) 輸出從第四個(gè)開始之后的所有字符print (str * 2) 輸出字符串兩次print (str + "bbbb") 連接字符串

字符串常用函數(shù):str.strip() 消除字符串s左右兩邊的空白字符(包括’\t’,’\n’,’\r’,’’)len(str) 獲取字符串長(zhǎng)度str.upper() 轉(zhuǎn)換為大寫str.lower() 轉(zhuǎn)換為小寫str.title() 每個(gè)單詞首字母大寫str.capitalize() 首字母大寫字符串翻轉(zhuǎn):

a = 'abcde'print(a[::-1])

字符串分割:

a = 'hello,python'print(a.split(',')) #['hello', 'python'] 返回一個(gè)列表

相對(duì)應(yīng)的還有一個(gè)將列表元素連接成字符串:

a = ['hello', 'python']str = '-'print(str.join(a)) # hello-python

四、列表列表的寫法是一個(gè)方括號(hào)內(nèi)的值用逗號(hào)分隔。比如上面的[‘hello’, ‘python’]。列表的數(shù)據(jù)項(xiàng)不需要具有相同的類型,列表中的每個(gè)元素都分配一個(gè)數(shù)字索引,第一個(gè)索引是0,第二個(gè)索引是1,依此類推。訪問(wèn)列表中的值可以通過(guò)下面的方式:

list1 = [1, 2, 3, 4, 5, 6]print(list1[2])

同樣可以通過(guò)索引截取

print ("list1[2:5]: ", list1[2:5])

列表常用操作:list1.append(‘7’) 追加一個(gè)元素在末尾,每次只能添加一個(gè)len(list1) 返回列表元素個(gè)數(shù)max(list1) 返回列表元素最大值min(list1) 返回列表元素最小值list1.count(obj) 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)list1.index(obj) 從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置list1.reverse() 反向列表中元素list1.clear() 清空列表list1.extend(seq) 在列表末尾一次性追加另一個(gè)序列中的多個(gè)值,也就是擴(kuò)充了列表 append與extend的區(qū)別:

A = ['a', 'b', 'c']A.append(['d', 'e'])print(A) # ['a', 'b', 'c', ['d', 'e']]B = ['a', 'b', 'c']B.extend(['d', 'e'])print(B) # ['a', 'b', 'c', 'd', 'e']

extend方法只能接收l(shuí)ist類型,它是把這個(gè)列表中的每個(gè)元素添加到原list中。append可以接收任意類型,追加到原list的末尾。

五、元組元組的創(chuàng)建也很簡(jiǎn)單,和list類似,只是把’[]‘換成了’()’。

tup1 = ('hello', 'python')

元組中只有一個(gè)元素的時(shí)候要注意:

tup2 = (10)tup3 = ('a')print(type(tup2)) #print(type(tup3)) #

因?yàn)檫@樣會(huì)被解釋器當(dāng)做運(yùn)算符,所以正確的方法是在第一個(gè)元素后面添加逗號(hào)。

tup4 = ('a',)print(type(tup4)) #

元組同樣可以使用下標(biāo)索引來(lái)訪問(wèn)元組中的值:

tup5 = ('hello', 'python', 'hello', 'word')print(tup5[1]) #pythonprint(tup5[1:3]) #('python', 'hello')

注意:元組是不可以被修改的。

tup6 = ('hello', 'python', 'hello', 'word')tup6[2] = 'aaa'

上面會(huì)出現(xiàn)一個(gè)異常: TypeError: ‘tuple’ object does not support item assignment.但是元組中如果包含了一個(gè)列表,那么這個(gè)列表是可以被修改的。

tup7 = ('hello', 'python', 'hello', 'word', ['aa', 'bb', 'cc'])tup7[-1][1] = 'ddd'print(tup7) # ('hello', 'python', 'hello', 'word', ['aa', 'ddd', 'cc'])

元組運(yùn)算符:len(tup) 計(jì)算元素個(gè)數(shù)tup1 + tup2 連接生成新元組tup * 4 元組復(fù)制num in tup 元素是否存在,返回True/False

六、字典python中的字典就是key,value的形式。使用大括號(hào)包含起來(lái)。字典中的成員的鍵是唯一的,如果出現(xiàn)多個(gè)同名的鍵,那么寫在后面覆蓋前面的值。形式如下:

dict1 = {'a' : 1, 'b' : 2}

字典的常用操作最基本的也就是增刪改查:獲取:直接通過(guò)鍵來(lái)獲取。

dict['b'] # 2

dict.keys() 獲取字典中所有的鍵dict.values() 獲取字典中的所有的值增加:

dict1['c'] = 3 #{'a': 1, 'b': 2, 'c': 3} #如果鍵存在則更新對(duì)應(yīng)的值

修改:直接給鍵進(jìn)行再次賦值就可以修改鍵對(duì)應(yīng)的值了。如果鍵不存在,則變成添加成員。還可以通過(guò):

dict1.update({"a":"11"})dict1.setdefault("a", "222") # 已存在的鍵則修改無(wú)效dict1.setdefault("d","222") # 不存在的話則創(chuàng)建dict1.setdefault("e") # 沒(méi)有設(shè)置值為None

刪除:使用pop刪除指定鍵對(duì)應(yīng)的成員,同時(shí)返回該值

print(dict1) # {'a': '11', 'b': 2, 'c': 3, 'd': '222', 'e': None}print(dict1.pop("a")) # aprint(dict1) # {'b': 2, 'c': 3, 'd': '222', 'e': None}#在不設(shè)置默認(rèn)值的情況下,使用pop刪除不存在的鍵,會(huì)報(bào)錯(cuò)。print(dict1.pop("f")) # 報(bào)錯(cuò) KeyError: 'f'

如果設(shè)置了默認(rèn)值, print(dict1.pop(“f”, None)),則不會(huì)報(bào)錯(cuò),返回這個(gè)默認(rèn)值。判斷是否刪除成功可以通過(guò)下面方式來(lái)判斷:

if dict1.pop("f", None) == None: print('鍵不存在')else: print('刪除成功')

以上則是python中最基本的數(shù)據(jù)類型以及用法,當(dāng)然還有其他的數(shù)據(jù)類型,作者暫時(shí)只列舉了這些。

更過(guò)python文章,關(guān)注作者哦!干貨多多!!

技術(shù)分享|利用Python和BeautifulSoup進(jìn)行網(wǎng)頁(yè)爬?。ㄐ率纸坛蹋?/span> 新手視頻課程

img

Pamela

關(guān)注
數(shù)據(jù)觀世界

在大數(shù)據(jù)、人工智能時(shí)代,我們通常需要從網(wǎng)站中收集我們所需的數(shù)據(jù),網(wǎng)絡(luò)信息的爬取技術(shù)已經(jīng)成為多個(gè)行業(yè)所需的技能之一。而Python則是目前數(shù)據(jù)科學(xué)項(xiàng)目中最常用的編程語(yǔ)言之一。使用Python與BeautifulSoup可以很容易的進(jìn)行網(wǎng)頁(yè)爬取,通過(guò)網(wǎng)站爬蟲獲取信息可以幫助企業(yè)或個(gè)人節(jié)省很多的時(shí)間和金錢。學(xué)習(xí)本文之后,我相信大部分新手都能根據(jù)自己的需求來(lái)開發(fā)出相應(yīng)的網(wǎng)頁(yè)爬蟲。

python

基礎(chǔ)條件

了解簡(jiǎn)單的Python編程規(guī)則(Python 3.x)了解簡(jiǎn)單的網(wǎng)頁(yè)Html標(biāo)簽

如果您是完全的新手也不用擔(dān)心,通過(guò)本文您可以很容易地理解。

安裝所需包

首先,您需要先安裝好Python 3.x,Python安裝包可以從python.org下載,然后我們需要安裝requests和beautifulsoup4兩個(gè)包,安裝代碼如下:

$ pip install requests

$ pip install beautifulsoup4

爬取網(wǎng)頁(yè)數(shù)據(jù)

現(xiàn)在我們已經(jīng)做好了一切準(zhǔn)備工作。在本教程中,我們將演示從沒(méi)被墻的維基百科英文版頁(yè)面中獲取歷屆美國(guó)總統(tǒng)名單。

轉(zhuǎn)到此鏈接(https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States#Presidents)并右鍵單擊包含有關(guān)美國(guó)總統(tǒng)的所有信息的表格,然后單擊“檢查”選項(xiàng)(我用的是Chrome瀏覽器,其他瀏覽器右鍵單擊頁(yè)面后也會(huì)具有類似或相同的選項(xiàng))。

wikipedia

由下圖可知,表格的內(nèi)容位于class屬性為wikitable的table標(biāo)簽下,我們需要了解這些標(biāo)簽信息來(lái)獲取我們所需內(nèi)容。

檢察元素

了解網(wǎng)頁(yè)信息之后,我們就可以編寫代碼了。首先,我們要導(dǎo)入我們安裝的包:

import requests

from bs4 import BeautifulSoup

為了獲取網(wǎng)頁(yè)數(shù)據(jù)我們要使用requests的get()方法:

url = "https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"

page = requests.get(url)

檢查http響應(yīng)狀態(tài),來(lái)確保我們能正常獲取網(wǎng)頁(yè),如果輸出狀態(tài)代碼為200則為正常:

print(page.status_code)

現(xiàn)在我們已經(jīng)獲取了網(wǎng)頁(yè)數(shù)據(jù),讓我們看看我們得到了什么:

print(page.content)

上面的代碼會(huì)顯示http相應(yīng)的全部?jī)?nèi)容,包括html代碼和我們需要的文本數(shù)據(jù)信息。通過(guò)使用beautifulsoup的prettify()方法可以將其更美觀的展示出來(lái):

soup = BeautifulSoup(page.content, 'html.parser')

print(soup.prettify())

這會(huì)將數(shù)據(jù)按照我們上面“檢查”中看到的代碼形式展示出來(lái):

page

目前獲得的是包含我們所需數(shù)據(jù)的網(wǎng)頁(yè)源碼,我們接下來(lái)要將有用的信息提取出來(lái)。上面已經(jīng)知道我們所需的內(nèi)容在class屬性為wikitable的table標(biāo)簽下,因此,接下來(lái)我們將使用bs4對(duì)象的find方法提取table標(biāo)簽中的數(shù)據(jù),此方法返回bs4對(duì)象:

tb = soup.find('table', class_='wikitable')

table標(biāo)簽下有很多嵌套標(biāo)簽,通過(guò)網(wǎng)頁(yè)檢查中的代碼可以發(fā)現(xiàn),我們最終是需要獲得title元素中的文本數(shù)據(jù),而title元素位于a標(biāo)簽下,a標(biāo)簽位于b標(biāo)簽下,b標(biāo)簽位于table標(biāo)簽下。為了獲取所有我們所需的數(shù)據(jù),我們需要提取table標(biāo)簽下的所有b標(biāo)簽,然后找到b標(biāo)簽下的所有a標(biāo)簽,為此,我們使用find_all方法來(lái)迭代獲取所有b標(biāo)簽下的a標(biāo)簽:

for link in tb.find_all('b'):

name = link.find('a')

print(name)

這將獲取所有a標(biāo)簽下的數(shù)據(jù):

a

可以看出,這并不是我們所要的最終結(jié)果,其中摻雜著html代碼,不用擔(dān)心,我們只需為上面的代碼添加get_text()方法,即可提取出所有a標(biāo)簽下title元素的文本信息,代碼改動(dòng)如下:

for link in tb.find_all('b'):

name = link.find('a')

print(name.get_text('title'))

最終獲得所有總統(tǒng)的名單如下:

George Washington

John Adams

Thomas Jefferson

James Monroe

...

...

Barack Obama

Donald Trump

將Python代碼合并在一起:

import requests

from bs4 import BeautifulSoup

url = "https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"

page = requests.get(url)

soup = BeautifulSoup(page.content, 'html.parser')

tb = soup.find('table', class_='wikitable')

for link in tb.find_all('b'):

name = link.find('a')

print(name.get_text('title'))

僅僅9行代碼,我們就實(shí)現(xiàn)了網(wǎng)頁(yè)信息的爬取,我相信您從中已經(jīng)學(xué)到了Python、html的基礎(chǔ)知識(shí),并且已經(jīng)懂得了網(wǎng)頁(yè)爬蟲的基本原理,如果想更深入的學(xué)習(xí)網(wǎng)頁(yè)爬蟲,你可以嘗試對(duì)以上代碼進(jìn)行改進(jìn),嘗試爬取更多的網(wǎng)站,歡迎與我留言交流。

END

Kaggle首次定義數(shù)據(jù)科學(xué)家:30歲,年薪5萬(wàn)刀,愛Python,最恨臟數(shù)據(jù) 行業(yè)視頻課程

img

紀(jì)念

關(guān)注

大數(shù)據(jù)文摘作品

作者:龍牧雪 魏子敏

今日凌晨,全球最大的數(shù)據(jù)科學(xué)社群Kaggle發(fā)布了第一份數(shù)據(jù)科學(xué)/機(jī)器學(xué)習(xí)業(yè)界現(xiàn)狀調(diào)查報(bào)告。這份調(diào)查問(wèn)卷的受訪者囊括了來(lái)自50多個(gè)國(guó)家的16,000+位從業(yè)者,根據(jù)他們的問(wèn)卷結(jié)果,Kaggle給出了一些有趣的結(jié)論:

1、Python可能是機(jī)器學(xué)習(xí)最常用的編程語(yǔ)言,而統(tǒng)計(jì)學(xué)家更多地使用R語(yǔ)言;

2、數(shù)據(jù)科學(xué)家的年齡中位數(shù)是30歲,而各國(guó)差異巨大,比如,印度的受訪人比澳大利亞平均年齡年輕9歲;

3、受訪者中碩士學(xué)位所占比重最大,但薪水最高的從業(yè)者($150k)多數(shù)擁有博士學(xué)位。

本次報(bào)告的發(fā)布也別具一格地采用了交互數(shù)據(jù)集的方式,并提供了樣本數(shù)據(jù)集供讀者自行分析,大數(shù)據(jù)文摘也得以利用這一數(shù)據(jù)集分析出了一些與中國(guó)數(shù)據(jù)科學(xué)從業(yè)者相關(guān)的結(jié)論,比如:

1、中國(guó)從業(yè)者更年輕:中國(guó)數(shù)據(jù)玩家年齡中位數(shù)25歲,比這一統(tǒng)計(jì)值的全球數(shù)據(jù)(30歲)小五歲;

2、從業(yè)者男女比例更加不均:中國(guó)僅有72名女性數(shù)據(jù)玩家填寫了問(wèn)卷,而男性有387人。男女比5.4:1;

關(guān)注大數(shù)據(jù)文摘,在公眾號(hào)后臺(tái)對(duì)話框內(nèi)回復(fù)“Kaggle”,即可直接下載這份數(shù)據(jù)集自己玩~

Kaggle同時(shí)為這份數(shù)據(jù)集設(shè)置了1000美金的獎(jiǎng)項(xiàng),如果你有新發(fā)現(xiàn),可以將自己的分析上傳至Kaggle,地址

https://kaggle/kaggle/kaggle-survey-2017

以下為報(bào)告精華:

數(shù)據(jù)科學(xué)從業(yè)者畫像

定義數(shù)據(jù)科學(xué)從業(yè)者的方式很多,Kaggle將從工作和背景的兩個(gè)方向進(jìn)行統(tǒng)計(jì):

“你的年齡多大?”

平均來(lái)看,問(wèn)卷調(diào)查填寫者的年齡中位數(shù)在30歲左右,但不同國(guó)家的這一數(shù)值也不盡相同,比如印度的受訪者就比澳大利亞年輕9歲。

中國(guó)數(shù)據(jù)玩家年齡中位數(shù)盡管高于印度,但仍然低于全球平均值,只有25歲。

“你的性別是什么?”

在性別這一欄,這份報(bào)告給了我們比較符合預(yù)期的結(jié)論,男女比例不均。

在全球的問(wèn)卷填寫者中,共有13427位男性和2714位女性,男女比4.9:1。

而在中國(guó),僅有72名女性數(shù)據(jù)玩家填寫了問(wèn)卷,而男性有387人。男女比5.4:1。

“你的就業(yè)情況如何?”

數(shù)據(jù)科學(xué)從業(yè)者的崛起讓自由職業(yè)者和兼職工作成為一種新潮流,而這一報(bào)告也應(yīng)證了這一結(jié)論。在全球,僅有65%的數(shù)據(jù)玩家擁有全職工作,而8%是自由職業(yè)。

相較之下,中國(guó)回答者的“沒(méi)有工作也不在找工作”的比例非常高(考慮到中國(guó)的回答者人數(shù)較少-只有400人,文摘菌認(rèn)為這個(gè)結(jié)果可能是學(xué)生比例較高造成的)。

“你的職位是什么?”

自從“數(shù)據(jù)科學(xué)家”被譽(yù)為全球最性感的職位后,這個(gè)職位也成為了很多從業(yè)者的奮斗目標(biāo)。而從調(diào)查結(jié)果看,全球范圍內(nèi),使用“數(shù)據(jù)科學(xué)家”作為自己Title的從業(yè)者比例最高,占到24.4%。

“你的年薪是多少?”

如果看薪酬,最高一級(jí)薪酬是年收入20萬(wàn)美元以上,這一檔全球有166人,相對(duì)于不分薪酬的數(shù)據(jù)科學(xué)家比例(24.4%),數(shù)據(jù)科學(xué)家比例有顯著提升(35.5%)。

全球數(shù)據(jù)相關(guān)從業(yè)者平均年薪55441美元(約合37萬(wàn)人民幣)。

收入上也有男女不均:男性比女性多收入3000美金/年。

中國(guó)數(shù)據(jù)相關(guān)從業(yè)者平均年薪29835美元(約合20萬(wàn)人民幣)??紤]到只有66人回答了這一問(wèn)題,結(jié)果解讀需謹(jǐn)慎。

“你的最高學(xué)歷是什么?”

全球范圍內(nèi),取得碩士學(xué)位的從業(yè)者最多。

按薪酬來(lái)看,年薪150k-200k美金和200k+美金的人群多數(shù)取得了博士學(xué)位。

這一題中國(guó)有420人回答,仍是取得碩士學(xué)位的人最多且比例和全球水平接近。博士的比例(11.2%)比全球(15.6%)少。

數(shù)據(jù)科學(xué)從業(yè)者日常工作內(nèi)容

Kaggle給數(shù)據(jù)科學(xué)家的定義是,“寫代碼并且分析數(shù)據(jù)的人群”。通過(guò)問(wèn)詢問(wèn)卷填寫者的日常工作,報(bào)告得到了如下結(jié)論:

“你的工作中用到哪些數(shù)據(jù)科學(xué)方法?”

邏輯回歸在數(shù)據(jù)科學(xué)從業(yè)者中最常被用到,占63.5%。

“工作中最常用到的工具?”

python python python

但職位是“統(tǒng)計(jì)學(xué)家”的人還是顯著地喜歡用R。

“工作中常用的數(shù)據(jù)類型是?”

工作中用到的數(shù)據(jù)主要是關(guān)系型數(shù)據(jù),主要使用Git共享代碼。

“工作中遇到的最大的困難?”

臟數(shù)據(jù)!看來(lái)數(shù)據(jù)科學(xué)領(lǐng)域最大的問(wèn)題還是臟數(shù)據(jù)。排名第二的困難是“缺少數(shù)據(jù)科學(xué)人才”。正在學(xué)習(xí)數(shù)據(jù)科學(xué)的小伙伴們,你們前途無(wú)量呀!請(qǐng)帶文摘菌一起飛!

新手如何入行數(shù)據(jù)科學(xué)領(lǐng)域?

作為一個(gè)數(shù)據(jù)科學(xué)學(xué)習(xí)社區(qū),Kaggle在這份報(bào)告中也提出了一些數(shù)據(jù)科學(xué)老司機(jī)給新手學(xué)習(xí)者的建議,可以說(shuō)是非常良心了?。ㄟ@一部分可能是本份報(bào)告中最有價(jià)值的部分,文摘菌敲黑板劃重點(diǎn)啦!)

“你們會(huì)推薦新手先學(xué)哪門語(yǔ)言?”

先學(xué)Python!這是Kaggle綜合了超一萬(wàn)名老司機(jī)的意見給出的結(jié)論。

“你最常使用哪種數(shù)據(jù)科學(xué)學(xué)習(xí)資源?”

數(shù)據(jù)科學(xué)是一個(gè)日新月異的領(lǐng)域,保持持續(xù)的學(xué)習(xí)能力非常重要。據(jù)調(diào)研問(wèn)卷顯示,數(shù)據(jù)科學(xué)老司機(jī)最常用到的學(xué)習(xí)資源包括Stack Overflow Q&A,相關(guān)論壇,以及Podcasts。而關(guān)于開源內(nèi)容,數(shù)據(jù)科學(xué)從業(yè)者更多使用官方文檔和觀看 Youtube 視頻。

“你從何獲取開源數(shù)據(jù)?”

沒(méi)有數(shù)據(jù)就沒(méi)有數(shù)據(jù)科學(xué),所以提到數(shù)據(jù)科學(xué)學(xué)習(xí)技能,不得不提到獲取開源優(yōu)質(zhì)數(shù)據(jù)的能力。報(bào)告中提到了一些優(yōu)質(zhì)數(shù)據(jù)獲取渠道,包括Dataset aggregator, Google Search等。

“怎么找工作?”

數(shù)據(jù)科學(xué)從業(yè)老司機(jī)在找工作上的忠告也非常有趣:去公司官網(wǎng)或相關(guān)網(wǎng)站的技術(shù)板塊乃下下策,他們更建議的方式是,直接聯(lián)系招聘人,或建立自己的關(guān)系網(wǎng)。

最后,對(duì)所有正在閱讀問(wèn)卷結(jié)果的人,文摘菌想特意說(shuō)明Kaggle在問(wèn)卷中備注的一句話:每個(gè)人都是獨(dú)特的,不是一個(gè)個(gè)平均數(shù)就能代表的。問(wèn)卷的結(jié)論建立在1.6萬(wàn)名Kaggle使用者的答案上,但他們只是數(shù)據(jù)從業(yè)者的一小部分——年齡、性別、所在地區(qū)、職位、薪酬、經(jīng)驗(yàn)和所受教育的不同都無(wú)法阻止我們對(duì)數(shù)據(jù)科學(xué)的熱愛!

Python基礎(chǔ)學(xué)習(xí)之常用六大數(shù)據(jù)類型 推廣視頻課程

img

許問(wèn)蘭

關(guān)注

剛開始學(xué)習(xí)一門編程語(yǔ)言,除了了解運(yùn)行環(huán)境與語(yǔ)言類型之外,最基本還是從該語(yǔ)言的基本數(shù)據(jù)類型開始學(xué)起。

Python六大常用數(shù)據(jù)類型:

int 整數(shù) float 浮點(diǎn)數(shù) str 字符串 list 列表 tuple 元組 dict 字典

講解這些先說(shuō)一下python中的變量與變量名。

變量其實(shí)本質(zhì)上是一個(gè)具有特殊格式的內(nèi)存,變量名則是指向這個(gè)內(nèi)存的別名。python中的變量不需要聲明,所有的變量必須賦值了才能使用。賦值的步驟:

a = 100

第一步:準(zhǔn)備好值100第二部:準(zhǔn)備好變量名a第三部:將值與名字進(jìn)行關(guān)聯(lián)

一、整數(shù)python將其他一些靜態(tài)語(yǔ)言中的int、long,也就是整型和長(zhǎng)整型合并為了一個(gè)。python中的int是邊長(zhǎng)的,也就是說(shuō)可以存儲(chǔ)無(wú)限大的整數(shù),但是這是不現(xiàn)實(shí)的,因?yàn)闆](méi)有這么多的內(nèi)存夠分配。整型不僅支持十進(jìn)制,還支持二進(jìn)制、八進(jìn)制、十六進(jìn)制??梢酝ㄟ^(guò)下面的方式來(lái)互相轉(zhuǎn)換:

print(bin(20)) #轉(zhuǎn)換二進(jìn)制print(oct(20)) #轉(zhuǎn)換八進(jìn)制print(hex(20)) #轉(zhuǎn)換十六進(jìn)制

二、浮點(diǎn)型浮點(diǎn)數(shù)也就是小數(shù),如22.1,44.2,也可以使用科學(xué)計(jì)數(shù)法,比如:1.22e8。python支持對(duì)整數(shù)和浮點(diǎn)數(shù)直接進(jìn)行四則混合運(yùn)算。整數(shù)運(yùn)算結(jié)果仍然是整數(shù),浮點(diǎn)數(shù)運(yùn)算結(jié)果仍然是浮點(diǎn)數(shù),但整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算的結(jié)果就變成浮點(diǎn)數(shù)了。

a = 1b = 1.1print(type(a+b)) #

三、字符串字符串在任何編程語(yǔ)言中都是最常用的數(shù)據(jù)類型。字符串的創(chuàng)建很簡(jiǎn)單,也是上面所說(shuō)的三步,但是要加上單引號(hào)或者雙引號(hào)。

a = "hello python"

也可以使用 “”" 創(chuàng)建多行字符串:

a = """ hello python"""

字符串可以通過(guò)下面方式進(jìn)行截取或者連接:

print (str[0:4]) 輸出第一個(gè)到倒數(shù)第四個(gè)的所有字符 print (str[0]) 輸出單字符 第1個(gè)字符print (str[3:]) 輸出從第四個(gè)開始之后的所有字符print (str * 2) 輸出字符串兩次print (str + "bbbb") 連接字符串

字符串常用函數(shù):str.strip() 消除字符串s左右兩邊的空白字符(包括’\t’,’\n’,’\r’,’’)len(str) 獲取字符串長(zhǎng)度str.upper() 轉(zhuǎn)換為大寫str.lower() 轉(zhuǎn)換為小寫str.title() 每個(gè)單詞首字母大寫str.capitalize() 首字母大寫字符串翻轉(zhuǎn):

a = 'abcde'print(a[::-1])

字符串分割:

a = 'hello,python'print(a.split(',')) #['hello', 'python'] 返回一個(gè)列表

相對(duì)應(yīng)的還有一個(gè)將列表元素連接成字符串:

a = ['hello', 'python']str = '-'print(str.join(a)) # hello-python

四、列表列表的寫法是一個(gè)方括號(hào)內(nèi)的值用逗號(hào)分隔。比如上面的[‘hello’, ‘python’]。列表的數(shù)據(jù)項(xiàng)不需要具有相同的類型,列表中的每個(gè)元素都分配一個(gè)數(shù)字索引,第一個(gè)索引是0,第二個(gè)索引是1,依此類推。訪問(wèn)列表中的值可以通過(guò)下面的方式:

list1 = [1, 2, 3, 4, 5, 6]print(list1[2])

同樣可以通過(guò)索引截取

print ("list1[2:5]: ", list1[2:5])

列表常用操作:list1.append(‘7’) 追加一個(gè)元素在末尾,每次只能添加一個(gè)len(list1) 返回列表元素個(gè)數(shù)max(list1) 返回列表元素最大值min(list1) 返回列表元素最小值list1.count(obj) 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)list1.index(obj) 從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置list1.reverse() 反向列表中元素list1.clear() 清空列表list1.extend(seq) 在列表末尾一次性追加另一個(gè)序列中的多個(gè)值,也就是擴(kuò)充了列表 append與extend的區(qū)別:

A = ['a', 'b', 'c']A.append(['d', 'e'])print(A) # ['a', 'b', 'c', ['d', 'e']]B = ['a', 'b', 'c']B.extend(['d', 'e'])print(B) # ['a', 'b', 'c', 'd', 'e']

extend方法只能接收l(shuí)ist類型,它是把這個(gè)列表中的每個(gè)元素添加到原list中。append可以接收任意類型,追加到原list的末尾。

五、元組元組的創(chuàng)建也很簡(jiǎn)單,和list類似,只是把’[]‘換成了’()’。

tup1 = ('hello', 'python')

元組中只有一個(gè)元素的時(shí)候要注意:

tup2 = (10)tup3 = ('a')print(type(tup2)) #print(type(tup3)) #

因?yàn)檫@樣會(huì)被解釋器當(dāng)做運(yùn)算符,所以正確的方法是在第一個(gè)元素后面添加逗號(hào)。

tup4 = ('a',)print(type(tup4)) #

元組同樣可以使用下標(biāo)索引來(lái)訪問(wèn)元組中的值:

tup5 = ('hello', 'python', 'hello', 'word')print(tup5[1]) #pythonprint(tup5[1:3]) #('python', 'hello')

注意:元組是不可以被修改的。

tup6 = ('hello', 'python', 'hello', 'word')tup6[2] = 'aaa'

上面會(huì)出現(xiàn)一個(gè)異常: TypeError: ‘tuple’ object does not support item assignment.但是元組中如果包含了一個(gè)列表,那么這個(gè)列表是可以被修改的。

tup7 = ('hello', 'python', 'hello', 'word', ['aa', 'bb', 'cc'])tup7[-1][1] = 'ddd'print(tup7) # ('hello', 'python', 'hello', 'word', ['aa', 'ddd', 'cc'])

元組運(yùn)算符:len(tup) 計(jì)算元素個(gè)數(shù)tup1 + tup2 連接生成新元組tup * 4 元組復(fù)制num in tup 元素是否存在,返回True/False

六、字典python中的字典就是key,value的形式。使用大括號(hào)包含起來(lái)。字典中的成員的鍵是唯一的,如果出現(xiàn)多個(gè)同名的鍵,那么寫在后面覆蓋前面的值。形式如下:

dict1 = {'a' : 1, 'b' : 2}

字典的常用操作最基本的也就是增刪改查:獲?。褐苯油ㄟ^(guò)鍵來(lái)獲取。

dict['b'] # 2

dict.keys() 獲取字典中所有的鍵dict.values() 獲取字典中的所有的值增加:

dict1['c'] = 3 #{'a': 1, 'b': 2, 'c': 3} #如果鍵存在則更新對(duì)應(yīng)的值

修改:直接給鍵進(jìn)行再次賦值就可以修改鍵對(duì)應(yīng)的值了。如果鍵不存在,則變成添加成員。還可以通過(guò):

dict1.update({"a":"11"})dict1.setdefault("a", "222") # 已存在的鍵則修改無(wú)效dict1.setdefault("d","222") # 不存在的話則創(chuàng)建dict1.setdefault("e") # 沒(méi)有設(shè)置值為None

刪除:使用pop刪除指定鍵對(duì)應(yīng)的成員,同時(shí)返回該值

print(dict1) # {'a': '11', 'b': 2, 'c': 3, 'd': '222', 'e': None}print(dict1.pop("a")) # aprint(dict1) # {'b': 2, 'c': 3, 'd': '222', 'e': None}#在不設(shè)置默認(rèn)值的情況下,使用pop刪除不存在的鍵,會(huì)報(bào)錯(cuò)。print(dict1.pop("f")) # 報(bào)錯(cuò) KeyError: 'f'

如果設(shè)置了默認(rèn)值, print(dict1.pop(“f”, None)),則不會(huì)報(bào)錯(cuò),返回這個(gè)默認(rèn)值。判斷是否刪除成功可以通過(guò)下面方式來(lái)判斷:

if dict1.pop("f", None) == None: print('鍵不存在')else: print('刪除成功')

以上則是python中最基本的數(shù)據(jù)類型以及用法,當(dāng)然還有其他的數(shù)據(jù)類型,作者暫時(shí)只列舉了這些。

更過(guò)python文章,關(guān)注作者哦!干貨多多?。?/p>

img

在線咨詢

建站在線咨詢

img

微信咨詢

掃一掃添加
動(dòng)力姐姐微信

img
img

TOP