標籤: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之檔案對象