python之檔案對象

來源:互聯網
上載者:User

標籤:python   電腦   緩衝區   linux   資料流   

防偽碼忘情公子著


檔案對象是用來訪問檔案系統介面所對應的資料的

檔案系統是OS用於明確磁碟或分區上的檔案的方法和資料結構—即在磁碟上組織檔案的方法

電腦檔案或稱檔案、電腦檔案、檔案是儲存在某種長期儲存裝置或臨時存放裝置中的一段資料流並且歸屬於電腦檔案系統管理之下

概括來講

        檔案是電腦中由OS管理的具有名字的儲存地區

        在Linux系統上檔案被看做是位元組序列

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/8B/AF/wKiom1hU9w-jYLj5AAC2K7fvLZ8039.png" title="檔案流.png" alt="wKiom1hU9w-jYLj5AAC2K7fvLZ8039.png" />


要想把資料存放區到檔案中有一個前提那就是必須序列化非序列化的資料是不能簡單的儲存在檔案系統中的檔案中的


對於python來說檔案對象不僅可以用來訪問普通的磁碟檔案此外在Linux中的一些特殊檔案比如通訊端檔案、具名管道等等也都可以通過檔案的對象介面來進行訪問。


對於python而言要想實現建立檔案對象就要使用python的內建函數open()來完成。

python的內建函數open()用於開啟檔案和建立檔案對象其使用方法如下

    open(name [,mode [,bufsize]])

open函數可以接收三個參數檔案名稱、模式和緩衝區參數。open函數返回的是一個檔案對象

        mode指定檔案的開啟模式

                簡單模式

                        r唯讀

                        w寫入

                        a附加

                在模式後使用“+”表示同時支援輸入、輸出操作

                        r+

                        w+

                        a+

                在模式後附加“b”表示以二進位方式開啟

                        如rb、wb+

                當以可寫入模式開啟檔案時若檔案不存在則會建立該檔案

                當以唯讀模式開啟檔案時若檔案不存在則會發出異常

        bufsize定義輸出緩衝

                0表示無輸出緩衝禁用緩衝

                1表示使用緩衝只緩衝一行資料

                負數表示使用系統預設設定使用系統預設緩衝

                正數表示使用近似指定大小的緩衝指定緩衝空間大小


檔案對象的方法

file.next()方法 以迭代方式擷取檔案的所有行

In [1]: f = open(‘/etc/passwd‘)In [2]: f.next()Out[2]: ‘##\n‘In [3]: f.next()Out[3]: ‘# User Database\n‘In [4]: f.next()Out[4]: ‘# \n‘In [5]: f.next()Out[5]: ‘# Note that this file is consulted directly only when the system is running\n‘In [6]: f.next()Out[6]: ‘# in single-user mode.  At other times this information is provided by\n‘In [7]: f.next()Out[7]: ‘# Open Directory.\n‘In [8]: f.next()Out[8]: ‘#\n‘In [9]: f.next()Out[9]: ‘# See the opendirectoryd(8) man page for additional information about\n‘In [10]: f.next()Out[10]: ‘# Open Directory.\n‘In [11]: f.next()Out[11]: ‘##\n‘In [12]: f.next()Out[12]: ‘nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false\n‘In [13]: f.next()Out[13]: ‘root:*:0:0:System Administrator:/var/root:/bin/sh\n‘In [14]: f.next()Out[14]: ‘daemon:*:1:1:System Services:/var/root:/usr/bin/false\n‘In [15]: f.next()Out[15]: ‘_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico\n‘


file.close()方法關閉檔案被關閉的檔案無法再從中讀取資料

In [24]: f.close()In [25]: f.next()---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-25-c3e65e5362fb> in <module>()----> 1 f.next()ValueError: I/O operation on closed file


file.fileno()方法返迴文件對象的檔案描述符

In [27]: f = open(‘/etc/passwd‘)In [28]: f.fileno()Out[28]: 10


file.readline()方法執行一次返回一行

In [30]: f = open(‘/etc/passwd‘)In [31]: f.readline()Out[31]: ‘##\n‘In [32]: f.readline()Out[32]: ‘# User Database\n‘In [33]: f.readline()Out[33]: ‘# \n‘


file.readlines()方法以列表模式返迴文件所有行

In [34]: f = open(‘/etc/passwd‘)In [35]: f.readlines()Out[35]:[‘##\n‘, ‘# User Database\n‘, ‘# \n‘, ‘# Note that this file is consulted directly only when the system is running\n‘, ‘# in single-user mode.  At other times this information is provided by\n‘, ‘# Open Directory.\n‘, ‘#\n‘, ‘# See the opendirectoryd(8) man page for additional information about\n‘, ‘# Open Directory.\n‘, ‘##\n‘, ‘nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false\n‘, ‘root:*:0:0:System Administrator:/var/root:/bin/sh\n‘, ‘daemon:*:1:1:System Services:/var/root:/usr/bin/false\n‘, ‘_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico\n‘, ‘_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false\n‘, ‘_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false\n‘, ‘_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false\n‘, ‘_lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false\n‘, ‘_postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false\n‘, ‘_scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false\n‘, ‘_ces:*:32:32:Certificate Enrollment Service:/var/empty:/usr/bin/false\n‘, ‘_mcxalr:*:54:54:MCX AppLaunch:/var/empty:/usr/bin/false\n‘, ‘_appleevents:*:55:55:AppleEvents Daemon:/var/empty:/usr/bin/false\n‘, ‘_geod:*:56:56:Geo Services Daemon:/var/db/geod:/usr/bin/false\n‘, ‘_serialnumberd:*:58:58:Serial Number Daemon:/var/empty:/usr/bin/false\n‘, ‘_devdocs:*:59:59:Developer Documentation:/var/empty:/usr/bin/false\n‘, ‘_sandbox:*:60:60:Seatbelt:/var/empty:/usr/bin/false\n‘, ‘_mdnsresponder:*:65:65:mDNSResponder:/var/empty:/usr/bin/false\n‘, ‘_ard:*:67:67:Apple Remote Desktop:/var/empty:/usr/bin/false\n‘, ‘_www:*:70:70:World Wide Web Server:/Library/WebServer:/usr/bin/false\n‘, ‘_eppc:*:71:71:Apple Events User:/var/empty:/usr/bin/false\n‘, ‘_cvs:*:72:72:CVS Server:/var/empty:/usr/bin/false\n‘, ‘_svn:*:73:73:SVN Server:/var/empty:/usr/bin/false\n‘, ‘_mysql:*:74:74:MySQL Server:/var/empty:/usr/bin/false\n‘, ‘_sshd:*:75:75:sshd Privilege separation:/var/empty:/usr/bin/false\n‘, ‘_qtss:*:76:76:QuickTime Streaming Server:/var/empty:/usr/bin/false\n‘, ‘_cyrus:*:77:6:Cyrus Administrator:/var/imap:/usr/bin/false\n‘, ‘_mailman:*:78:78:Mailman List Server:/var/empty:/usr/bin/false\n‘, ‘_appserver:*:79:79:Application Server:/var/empty:/usr/bin/false\n‘, ‘_clamav:*:82:82:ClamAV Daemon:/var/virusmails:/usr/bin/false\n‘, ‘_amavisd:*:83:83:AMaViS Daemon:/var/virusmails:/usr/bin/false\n‘, ‘_jabber:*:84:84:Jabber XMPP Server:/var/empty:/usr/bin/false\n‘, ‘_appowner:*:87:87:Application Owner:/var/empty:/usr/bin/false\n‘, ‘_windowserver:*:88:88:WindowServer:/var/empty:/usr/bin/false\n‘, ‘_spotlight:*:89:89:Spotlight:/var/empty:/usr/bin/false\n‘, ‘_tokend:*:91:91:Token Daemon:/var/empty:/usr/bin/false\n‘, ‘_securityagent:*:92:92:SecurityAgent:/var/db/securityagent:/usr/bin/false\n‘, ‘_calendar:*:93:93:Calendar:/var/empty:/usr/bin/false\n‘, ‘_teamsserver:*:94:94:TeamsServer:/var/teamsserver:/usr/bin/false\n‘, ‘_update_sharing:*:95:-2:Update Sharing:/var/empty:/usr/bin/false\n‘, ‘_installer:*:96:-2:Installer:/var/empty:/usr/bin/false\n‘, ‘_atsserver:*:97:97:ATS Server:/var/empty:/usr/bin/false\n‘, ‘_ftp:*:98:-2:FTP Daemon:/var/empty:/usr/bin/false\n‘, ‘_unknown:*:99:99:Unknown User:/var/empty:/usr/bin/false\n‘, ‘_softwareupdate:*:200:200:Software Update Service:/var/empty:/usr/bin/false\n‘, ‘_coreaudiod:*:202:202:Core Audio Daemon:/var/empty:/usr/bin/false\n‘, ‘_screensaver:*:203:203:Screensaver:/var/empty:/usr/bin/false\n‘, ‘_locationd:*:205:205:Location Daemon:/var/db/locationd:/usr/bin/false\n‘, ‘_trustevaluationagent:*:208:208:Trust Evaluation Agent:/var/empty:/usr/bin/false\n‘, ‘_timezone:*:210:210:AutoTimeZoneDaemon:/var/empty:/usr/bin/false\n‘, ‘_lda:*:211:211:Local Delivery Agent:/var/empty:/usr/bin/false\n‘, ‘_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false\n‘, ‘_usbmuxd:*:213:213:iPhone OS Device Helper:/var/db/lockdown:/usr/bin/false\n‘, ‘_dovecot:*:214:6:Dovecot Administrator:/var/empty:/usr/bin/false\n‘, ‘_dpaudio:*:215:215:DP Audio:/var/empty:/usr/bin/false\n‘, ‘_postgres:*:216:216:PostgreSQL Server:/var/empty:/usr/bin/false\n‘, ‘_krbtgt:*:217:-2:Kerberos Ticket Granting Ticket:/var/empty:/usr/bin/false\n‘, ‘_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false\n‘, ‘_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false\n‘, ‘_devicemgr:*:220:220:Device Management Server:/var/empty:/usr/bin/false\n‘, ‘_webauthserver:*:221:221:Web Auth Server:/var/empty:/usr/bin/false\n‘, ‘_netbios:*:222:222:NetBIOS:/var/empty:/usr/bin/false\n‘, ‘_warmd:*:224:224:Warm Daemon:/var/empty:/usr/bin/false\n‘, ‘_dovenull:*:227:227:Dovecot Authentication:/var/empty:/usr/bin/false\n‘, ‘_netstatistics:*:228:228:Network Statistics Daemon:/var/empty:/usr/bin/false\n‘, ‘_avbdeviced:*:229:-2:Ethernet AVB Device Daemon:/var/empty:/usr/bin/false\n‘, ‘_krb_krbtgt:*:230:-2:Open Directory Kerberos Ticket Granting Ticket:/var/empty:/usr/bin/false\n‘, ‘_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/false\n‘, ‘_krb_changepw:*:232:-2:Open Directory Kerberos Change Password Service:/var/empty:/usr/bin/false\n‘, ‘_krb_kerberos:*:233:-2:Open Directory Kerberos:/var/empty:/usr/bin/false\n‘, ‘_krb_anonymous:*:234:-2:Open Directory Kerberos Anonymous:/var/empty:/usr/bin/false\n‘, ‘_assetcache:*:235:235:Asset Cache Service:/var/empty:/usr/bin/false\n‘, ‘_coremediaiod:*:236:236:Core Media IO Daemon:/var/empty:/usr/bin/false\n‘, ‘_launchservicesd:*:239:239:_launchservicesd:/var/empty:/usr/bin/false\n‘, ‘_iconservices:*:240:240:IconServices:/var/empty:/usr/bin/false\n‘, ‘_distnote:*:241:241:DistNote:/var/empty:/usr/bin/false\n‘, ‘_nsurlsessiond:*:242:242:NSURLSession Daemon:/var/db/nsurlsessiond:/usr/bin/false\n‘, ‘_nsurlstoraged:*:243:243:NSURLStorage Daemon:/var/empty:/usr/bin/false\n‘, ‘_displaypolicyd:*:244:244:Display Policy Daemon:/var/empty:/usr/bin/false\n‘, ‘_astris:*:245:245:Astris Services:/var/db/astris:/usr/bin/false\n‘, ‘_krbfast:*:246:-2:Kerberos FAST Account:/var/empty:/usr/bin/false\n‘, ‘_gamecontrollerd:*:247:247:Game Controller Daemon:/var/empty:/usr/bin/false\n‘, ‘_mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash\n‘, ‘_ondemand:*:249:249:On Demand Resource Daemon:/var/db/ondemand:/usr/bin/false\n‘, ‘_xserverdocs:*:251:251:OS X Server Documents Service:/var/empty:/usr/bin/false\n‘, ‘_wwwproxy:*:252:252:WWW Proxy:/var/empty:/usr/bin/false\n‘]

由於readlines是一次性擷取所有行若檔案資料特別多將會極其佔用記憶體資源所以一般不用readlines如果需要讀取檔案所有行可以使用readline進行迭代擷取

當readline讀取到檔案末尾時再執行readline時將返回一個Null 字元串

In [1]: f = open(‘/Users/seancheng/aa.txt‘)In [2]: f.readline()Out[2]: ‘fadjlfjdakf\n‘In [3]: f.readline()Out[3]: ‘213242345\n‘In [4]: f.readline()Out[4]: ‘fjdagu8908fa\n‘In [5]: f.readline()Out[5]: ‘fdaf343435\n‘In [6]: f.readline()Out[6]: ‘fadgjljl;8\n‘In [7]: f.readline()Out[7]: ‘fjadljg5\n‘In [8]: f.readline()Out[8]: ‘‘In [9]: f.readline()Out[9]: ‘‘


file.tell()方法返回當前指標在檔案中的位置。以位元組為單位如下表示指標在第66個位元組的位置上

In [10]: f.tell()Out[10]: 66


file.seek()方法定義檔案指標的位置其使用方法如下

seek(offset[, whence])

offset指定位移量

whence指定從哪裡開始位移

        0表示從檔案頭開始位移

        1表示從當前位置開始位移

        2表示從檔案尾部開始位移

In [13]: f.tell()Out[13]: 66In [14]: f.seek(0)In [15]: f.tell()Out[15]: 0

如上所示若不給whence的話預設的從檔案頭開始位移


file.read()方法明確指定從檔案中指定要讀取多少個位元組結果返回成一個字串

例讀取10個位元組

In [16]: f.read(10)Out[16]: ‘fadjlfjdak‘In [17]: f.tell()Out[17]: 10

當不指定位元組數時將讀取整個檔案

In [1]: f = open(‘/Users/seancheng/aa.txt‘)In [2]: f.tell()Out[2]: 0In [3]: f.read()Out[3]: ‘fadjlfjdakf\n213242345\nfjdagu8908fa\nfdaf343435\nfadgjljl;8\nfjadljg5\n‘In [4]: f.tell()Out[4]: 66


file.name屬性直接調用當前檔案的全路徑名稱

In [6]: f.nameOut[6]: ‘/Users/seancheng/aa.txt‘


file.write(s)寫入字串s

file.writelines(lines)寫入序列lines中的所有字串只能將字串序列寫入到檔案中

file.flush()重新整理緩衝區手動同步資料到磁碟中

file.truncate([size])將檔案截斷為最多size位元組也就是說檔案被截取後只剩下size位元組

file.closed返回當前檔案是否為關閉狀態

file.encoding返回當前檔案使用的編碼

file.mode返回當前檔案的開啟模式


這就是python中的檔案對象僅以此篇作為python學習成長記錄。

本文出自 “忘情博” 部落格,請務必保留此出處http://itchentao.blog.51cto.com/5168625/1883617

python之檔案對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.