乾貨分享丨Python從入門到編寫POC之讀寫文件

自發布了 的相關文章後,深受大家喜愛,遂將Python從入門到編寫POC系列教程的其他章節與大家分享,旨在快速提升安全技能!

乾貨分享丨Python從入門到編寫POC之讀寫文件

今天與大家分享的是Python從入門到編寫POC系列文章之讀寫文件,希望對大家學習有所幫助。


讀寫文件

讀取鍵盤輸入【raw_input( )或者input( )】

<code>>>> demo = raw_input('INPUT:'); \\  # \\是在CMD中的換行符... print "content is" , demoINPUT:HELL0 MOMOcontent is HELL0 MOMO/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

打開或關閉文件,這裡要用Python的內置函數open( ),然後創建一個file對象。

Python打開文件的模式:

  • r 以只讀模式打開文件。
  • w 以只寫模式打開文件,且先把文件內容清空(truncate the file first)wb 以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
  • a 以添加模式打開文件,寫文件的時候總是寫到文件末尾,用seek也無用。打開的文件也是不能讀的。
  • r+ 以讀寫方式打開文件,文件可讀可寫,可寫到文件的任何位置。
  • w+ 和r+不同的是,它會truncate the file first。
  • a+ 和r+不同的是,它只能寫到文件末尾。

一個文件被打開後,有一個file對象,可以得到有關該文件的各種信息,以下是一些使用方法:

  • file.closed 返回true如果文件已被關閉,否則返回false。
  • file.mode 返回被打開文件的訪問模式。
  • file.name 返回文件的名稱。
  • file.softspace 如果用print輸出後,必須跟一個空格符,則返回false。否則返回true。

舉個例子

<code>>>> demo = open("MOMO.txt","wb")>>> print u'是否關閉:', demo.closed是否關閉:False>>> print u'訪問模式:',demo.mode訪問模式: wb>>> print u'文件名稱:',demo.name文件名稱:MOMO.txt>>> print u'末尾是否加空格:',demo.softspace末尾是否加空格:0/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

在txt中寫入東西

<code>>>> demo = open("MOMO.txt","wb")>>> demo.write("MOMO is My GODDESS!!!")>>> demo.close()/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

讀txt中的內容

<code>>>> demo1 = open("MOMO.txt","r")>>> demo1.readlines()['MOMO is My GODDESS!!!']/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

判斷

咱們講的是Python判斷,先來看一個例子:

<code>#coding = utf-8if 'MOMO' Love BZ':        print Trueelse:        print False/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

當判斷條件成立時(非零),則執行後面的語句,所以就返回了True。

if 語句的判斷條件可以用>(大於)、=(大於等於)、<=(小於等於)來表示其關係。


循環

While循環

格式為:

<code>while 判斷條件:    執行語句……/<code>

舉個例子:

<code>#coding=utf-8port = 1100while port < 1109:        print "The PORT is:"+str(port)port=port+1/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

PS:如果沒有port=port+1,該循環將成為無限循環,通過Ctrl+C終止,當然了,while循環也有else語句,方法跟 if 語句差不多,這裡就不演示了還有break和continue語句。

在循環過程中,break語句可以提前退出循環。

通過continue語句,跳過當前的這次循環,直接開始下一次循環。

不過根據經驗來說,While循環出現的次數沒有For循環多。


For循環

格式為:

<code>for iterating_var in sequence:  statements(s)/<code>

For循環的好處呢,比如你要算1+2+3+4+5手寫還有解決。

當然也可以用Python,這裡用到的就是For循環。

<code>#coding = utf-8sum = 0for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:        sum = sum + iprint sum/<code>

那如果是1+2+3+4+...+100呢?

這裡咱們還用For循環,不過加了range( )函數,可以生成一個整數數列:

range(101)生成1-100的數

<code>#coding = utf-8sum = 0for i in range(101):        sum = sum +iprint sum/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

理解函數

在初中時代,數學課本是可以這麼定義函數的:y=8x+6

在高中時代,就可以這麼定義函數了:f(x)=8x+8

其中,x是什麼呢?是變量,你想讓它是啥數就是啥數。

當x=6時,f(6)=8*6+8=56

But,這並不是全部,其實在函數中,並沒有規定函數是一個數,它可是任何東西。

變量的本質,你可以把他當作一個佔位符,建立一個簡單的函數,咱們現在Python的解釋器操作:

<code>>>> x = 8>>> y=8*x+8>>> y72/<code>

咱們在繼續

<code>>>> x = 6>>> y72/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

當x等於6時了,y=8*x+8為啥還是72呢?

x=8時含義將8這個對象貼上了變量x的標籤,經過計算得到了72,然後變量y就引用了72;當x值變了時,但是y引用得對象還沒有變,所以就還是72。

這裡還“不正規”,咱們接下來就學習定義一個“正規”函數。


定義函數

函數

代碼塊以 def 關鍵詞開頭,def這個簡寫來自define,後接函數標識符名稱和圓括號( )。

定義函數內容以冒號起始,然後必須縮進(四個空格或者一個tab鍵),定義函數格式為:

<code>def 函數名(參數):        函數體/<code>

舉個例子:

<code>>>> def MOMO():...     print 'HELL0 MOMO!!'...>>> MOMO()  #調用MOMO這個函數HELL0 MOMO!!/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

在定義函數的時候,參數可以等你被賦值,也可以定義一個默認值。

<code>#coding = utf-8def MOMO(a,b='BaZong'):        print "a:",a        print "b:",bMOMO('MOMO')print "--------------------------"MOMO(a='MOMO')/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

如果我不給變量b定義一個值,那麼就會用BaZong這個值,那如果它傳了一個新的值,那就會用新的那個值。

乾貨分享丨Python從入門到編寫POC之讀寫文件

返回值

是不是感覺跟你見到的高大上的Python有一點差別,也許你們會注意到上面都是用print輸出結果,用個求絕對值的栗子來引用返回值return。

<code>#coding = utf-8def my_abs(x):        if x >= 0:                return x        else:                return -xif __name__ == '__main__':        number = 666        print number/<code>

仔細看my_abs( )函數,有return x和return -x,意思就是將x/-x的值返回,返回給誰呢?

一般情況,要將返回的值傳給一個變量,然後通過變量打印出來,如果沒有,那就沒有回顯了。

return還有個作用,咱們在來通過一個例子看,我這裡導入了base64模塊。

<code>#coding = utf-8import base64def demo():        str = "TU9NTyBpcyBhIGJlYXV0aWZ1bCBnaXJs"        result = base64.b64decode(str)        print result        return        print "KISS MOMO"demo()/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

兩個print語句,只執行了return上面的那個,這是為什麼呢?

第一個print語句遇到return,return告訴他自己要回家,即為返回,終止了第一個print的路程;然後就沒有執行第二個print語句,你可以把它當成循環中的break。


全局變量and局部變量

通過例子來說明:

<code>#coding = utf-8 a = 'momo'def demo():        a = 'BaZong'        print "this a is",ademo()print "---------------"print "this a is",a/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

前一個print輸出的函數內部的變量,後一個是外部的,像這樣的,只在函數體內(某個範圍內)起作用的就叫局部變量。


全局變量

<code>#coding = utf-8 a = 'momo'def demo():        global a        a = 'BaZong'        print "this a is",ademo()print "---------------"print "this a is",a/<code>
乾貨分享丨Python從入門到編寫POC之讀寫文件

這兩個例子區別就是多了個global a,意思就是讓a是全局變量,也就是說,外面跟裡面的a都一樣。

學任何一門程序語言的竅門都是要多練,多琢磨


分享到:


相關文章: