• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Sivan's blog

            用代碼說話……
            posts - 14, comments - 2, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            [學(xué)]Python用戶手冊筆記_4_Input and Output

            Posted on 2010-12-25 16:33 Sivan 閱讀(413) 評論(0)  編輯 收藏 引用 所屬分類: Python

            6. 輸入輸出

            6.1 設(shè)計輸出格式

            輸出值的方法:表達式語句、print語句和write()方法。

            想要對輸入字符串格式做一些復(fù)雜的控制,有兩種方法。第一,控制整個字符串,使用字符切割和聯(lián)接操作創(chuàng)建任意輸出形式。第二,使用%操作符和字符串作為左參數(shù)。%操作符將左參數(shù)解釋為類似于sprintf()風(fēng)格的格式字符串,并作用于右參數(shù),從操作中返回格式化的字符串。

            Python中可以使用repr()或str()函數(shù),將值轉(zhuǎn)為字符串。反引號('')等價于repr()。這些函數(shù)在未來的Python版本中將會被去掉。

            函數(shù)str()用于將值轉(zhuǎn)化為適于人閱讀的形式,而repr()轉(zhuǎn)化為共解釋器讀取的形式(如果沒有等價的語法,則會發(fā)生SyntaxError異常)。某對象沒有適于人閱讀的解釋形式時,str()會返回與repr()等同的值。數(shù)值、鏈表、字典對各函數(shù)有統(tǒng)一的解讀方式。字符串和浮點數(shù),有獨特的解讀方式。

            示例:

            >>> s= 'Hello World!'
            
            >>> str(s)
            
            'Hello World!'
            
            >>> repr(s)
            
            "'Hello World!'"
            
            >>> str(0.1)
            
            '0.1'
            
            >>> repr(0.1)
            
            '0.10000000000000001'
            
            >>> hello = 'hello world\n'
            
            >>> print hello
            
            hello world
            
            >>> print repr(hello)
            
            'hello world\n'
            
            >>> print str(hello)
            
            hello world
            
            >>> x = 10*3.25
            
            >>> y = 200*200
            
            >>> 'x, y, (`spam`,`eggs`)'
            
            'x, y, (`spam`,`eggs`)'
            
            >>> 
            
            一個輸出平方和立方的例子:
            
            >>> for x in range(1, 11):
            
            ...  print repr(x).rjust(2), repr(x*x).rjust(3),
            
            ...  print repr(x*x*x).rjust(4)
            
            ... 
            
             1   1    1
            
             2   4    8
            
             3   9   27
            
             4  16   64
            
             5  25  125
            
             6  36  216
            
             7  49  343
            
             8  64  512
            
             9  81  729
            
            10 100 1000
            
            >>> 
            

            print方法總會在兩個參數(shù)之間增加一個空格。rjust()函數(shù)參數(shù)為輸出所占的位數(shù),輸出方式為右對齊。類似的函數(shù)有l(wèi)just()和center()。這些函數(shù)只是輸出新的字符串,并不改變它們,如果輸出的字符串太長,也不會被截斷,而是原樣輸出。如果要截斷字符串,可以使用切割操作,如,x.ljust(n)[:n]。

            zfill()用于向數(shù)值的字符串表達左側(cè)填充0。該函數(shù)可以正確理解正負號。

            >>> '12'.zfill(5) 
            
            '00012' 
            
            >>> '-3.14'.zfill(7) 
            
            '-003.14' 
            
            >>> '3.14159265359'.zfill(5) 
            
            '3.14159265359' 
            
            >>>

            %操作符使用方法

            >>> import math 
            
            >>> print 'The value of PI is approximately %5.3f.' % math.pi 
            
            The value of PI is approximately 3.142. 
            
            >>>  
            如果有超過一個的字符串要格式化為一體,就需要將它們傳入一個元組做為右值:
            >>> table = {'A':001, 'B':002, 'C':003} 
            
            >>> for name, phone in table.items(): 
            
            ...  print '%-10s ==> %10d' % (name, phone) 
            
            ...  
            
            A          ==>          1 
            
            C          ==>          3 
            
            B          ==>          2 
            
            >>>  
            大多數(shù)類C的格式化操作都需要傳入適當?shù)念愋汀J褂?s格式會更輕松一些:如果對應(yīng)的參數(shù)不是字符串,它會通過內(nèi)置的str()函數(shù)轉(zhuǎn)化為字符串。Python支持用*作為一個隔離參數(shù)來傳遞寬度或精度。Python不支持C的%n和%p操作符。

            變量格式化通過名字而不是位置,這樣可以產(chǎn)生符合真實長度的格式化字符串,而不用分隔。這一效果可以通過使用form % (name) format結(jié)構(gòu)來實現(xiàn):

            >>> table = {'A':001, 'B':002, 'C':003} 
            
            >>> print 'A:%(A)d; B:%(B)d; C:%(C)d' % table 
            
            A:1; B:2; C:3 
            
            >>>  
            這個技巧在新的內(nèi)置函數(shù)vars()組合使用時非常有用,該函數(shù)返回一個包含所有局部變量的字典。

            6.2 讀寫文件

            open()返回一個文件,通過的用法需要兩個參數(shù):open(filename, mode)

            >>> f = open('C:/Users/cym/Desktop/1.txt', 'w') 
            
            >>> print f 
            
            <open file 'C:/Users/cym/Desktop/1.txt', mode 'w' at 0x03D07548> 
            
            >>>  
            mode有:

            r,此選項使文件只讀,默認模式;

            w,此選項使文件只寫,對于已經(jīng)存在的同名文件,該操作覆蓋源文件;

            a,此選項以追加方式打開文件;

            r+,此選項以讀寫方式打開文件。

            在Windows和Moc平臺,b模式以二進制方式打開文件,所以會有rb,wb,r+b等等組合。Windows平臺上文本文件與二進制文件是有區(qū)別的,讀寫文本文件時,行尾會自動添加行結(jié)束符。這種后臺操作方式對ASCII文本文件沒有什么問題,但是操作JPEG或EXE這樣的二進制文件就會產(chǎn)生破壞。在操作這些文件時一定要記得以二進制模式打開。

            6.2.1 文件對象方法

            讀文件,f.read(size)。該方法讀取若干數(shù)量的數(shù)據(jù)并以字符串形式返回其內(nèi)容,字符串長度為數(shù)值size所指定的大小。如果沒有指定size或者指定為負數(shù),就會讀取并返回整個文件。當文件大小為當前機器內(nèi)存兩倍時,就會產(chǎn)生問題。正常情況下,會盡可能按比較大的size讀取和返回數(shù)據(jù)。如果到了文件末尾,f.read()會返回一個空字符串。

            >>> f = open('C:/Users/cym/Desktop/1.txt', 'r') 
            
            >>> f.read() 
            
            '' 
            
            >>>  
            f.readline()從文件中讀取單獨一行,字符串結(jié)尾會自動加上一個換行符,只有當文件最后一行沒有以換行符結(jié)尾時,這一操作才會被忽略。如果f.readline()返回一個空字符串,那就表示到達了文件末尾,如果是一個空行,就會描述為\n,一個只包含換行符的字符串。

            f.readlines([size])返回一個列表,包含了文件中所有的數(shù)據(jù)行。如果給定了size參數(shù),就會讀入多于一行的比特數(shù),從中返回多行文本。這個功能通常用于高效讀取大型行文本,避免了將整個文件讀入內(nèi)存。這種操作只返回完整的行。

            一種另外的方法是循環(huán)讀取文件。這是一種內(nèi)存效率高,速度快,代碼簡單的方法:

            >>> for line in f: 
            
            ...  print line, 
            
            ...  
            交換通道很簡單,但是不提供完整的控制。因為兩個通道管理線緩沖不同,它們不能混合。

            如果需要寫入字符串以外的數(shù)據(jù),就要先把這些數(shù)據(jù)轉(zhuǎn)換為字符串。

            >>> f = open('C:\\Users\\cym\\Desktop\\test.txt','r+') 
            
            >>> value = ('the answer', 42) 
            
            >>> s = str(value) 
            
            >>> f.write(s) 
            
            >>> f.close() 
            
            >>>  
            f.tell()返回一個整數(shù),代表文件對象在文件中的指針位置,該數(shù)值計量了自文件開頭到指針處的比特數(shù)。需要改變文件對象指針的話,使用f.seek(offset, from_what)。指針在該操作中從指定的引用位置移動offset比特,引用位置由from_what參數(shù)指定。from_what值為0表示自文件起處開始,1表示自當前文件指針位置開始,2表示自文件末尾開始。from_what可以忽略,其默認值為0,此時從文件頭開始。

            文件使用完后,調(diào)用f.close()可以關(guān)閉文件,釋放打開文件后占用的系統(tǒng)資源。調(diào)用f.close()之后,再調(diào)用文件對象會自動引發(fā)錯誤。

            文件對象還有一些不太常用的附加方法,比如isatty()和truncate()。

            6.2.2 pickle模塊

            我們可以很容易的讀寫文件中的字符串。數(shù)值就要多費點周折,因為read()方法只會返回字符串,應(yīng)該將其傳入int()方法中,就可以將'123'這樣的字符串轉(zhuǎn)為對應(yīng)的數(shù)值123。不過,當你需要保存更為復(fù)雜的數(shù)據(jù)類型,例如鏈表、字典,類的實例,事情就會變的更復(fù)雜了。Python提供了一個名為pickle的標準模塊。這是一個令人贊嘆的模塊,幾乎可以把任何Python對象表達為字符串,這一過程稱之為封裝。從字符串表達出重新構(gòu)造對象之為拆封unpickling。封裝狀態(tài)中的對象可以存儲在文件或?qū)ο笾校惨酝ㄟ^網(wǎng)絡(luò)在遠程的機器之間傳輸。

            如果你有一個對象x,一個以寫模式打開的文件對象f,封裝對象的最簡單的方法只需要一行代碼:

            pickle.dump(x,f)

            如果f是一個以讀模式打開的文件對象,就可以重裝拆封這個對象:

            x=pickle.load(f)

            pickle是存儲Python對象以供其它程序或其本身以后調(diào)用的標準方法。提供這一組技術(shù)的一個持久化對象。因為pickle的用途很廣泛,很多Python擴展的作者都非常注意類似矩陣這樣的新數(shù)據(jù)類型是否適合封裝和拆封。

            91久久精品视频| 无码八A片人妻少妇久久| 久久久久久伊人高潮影院| 久久精品国产99久久久香蕉| 91精品国产综合久久久久久| 久久久精品人妻一区二区三区蜜桃| 久久久久久久久久久久久久| 久久人人爽人人爽人人片av麻烦| 人人狠狠综合久久亚洲| 色悠久久久久久久综合网| 怡红院日本一道日本久久| 国产精品禁18久久久夂久| 久久精品国产99国产精偷| 国产精品亚洲综合专区片高清久久久| 精品一区二区久久| 国产精品九九久久免费视频| 国内精品伊人久久久久网站| 久久久精品视频免费观看| 国产精品久久久久蜜芽| 久久夜色精品国产网站| 99久久免费国产精精品| 激情综合色综合久久综合| 亚洲日韩欧美一区久久久久我| 中文字幕无码免费久久| 久久er热视频在这里精品| 久久丝袜精品中文字幕| 日韩精品久久久肉伦网站| 99热成人精品热久久669| 久久男人中文字幕资源站| 久久久久久精品成人免费图片| 久久99精品久久久久婷婷| 国内精品久久久久久久coent| 亚洲人AV永久一区二区三区久久| 久久综合精品国产二区无码| 欧美久久亚洲精品| jizzjizz国产精品久久| 亚洲精品乱码久久久久久蜜桃| A狠狠久久蜜臀婷色中文网| 一级A毛片免费观看久久精品| 久久99精品国产一区二区三区| 久久人人爽人人爽人人片AV不|