亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python入門篇之文件

系統(tǒng) 1851 0

文件處理的函數(shù)和方法

使用Open()函數(shù)可打開文件,語法格式如下:

復(fù)制代碼 代碼如下:

file_handler = open(filename,[,mode[,bufsize]]

filename是你要操作的文件名,如果不在當(dāng)前路徑,需指出具體路徑。mode是打開文件的模式,表示你要如何操作文件,bufsize表示是否使用緩存。

mode

?

模式 描述
r 以讀方式打開文件,可讀取文件信息。
w 以寫方式打開文件,可向文件寫入信息。
a 以追加方式打開文件,文件指針自動(dòng)移到文件尾。
r+ 以讀寫方式打開文件,可對(duì)文件進(jìn)行讀和寫操作。
w+ 消除文件內(nèi)容,然后以讀寫方式打開文件。
a+ 以讀寫方式打開文件,并把文件指針移到文件尾。
b 以二進(jìn)制模式打開文件,而不是以文本模式。該模式只對(duì)Windows或Dos有效,類Unix的文件是用二進(jìn)制模式進(jìn)行操作的。

bufsize

bufsize取值 描述
0 禁用緩沖
1 行緩沖
>1 指定緩沖區(qū)的大小
<1 系統(tǒng)默認(rèn)的緩沖區(qū)大小
?

open()函數(shù)返回一個(gè)文件對(duì)象,我們可通過read()或write()函數(shù)對(duì)文件進(jìn)行讀寫操作,下面是一些文件對(duì)象方法:

文件對(duì)象方法

方法 描述
f.close() 關(guān)閉文件,記住用open()打開文件后一定要記得關(guān)閉它,否則會(huì)占用系統(tǒng)的可打開文件句柄數(shù)。
f.fileno() 獲得文件描述符
f.flush() 刷新輸出緩存
f.isatty() 如果文件是一個(gè)交互終端,則返回True,否則返回False。
f.read([count]) 讀出文件,如果有count,則讀出count個(gè)字節(jié)。
f.readline() 讀出一行信息。
f.readlines() 讀出所有行,也就是讀出整個(gè)文件的信息。
f.seek(offset[,where]) 把文件指針移動(dòng)到相對(duì)于where的offset位置。offset為0表示文件開始處,這是默認(rèn)值 ;1表示當(dāng)前位置;2表示文件結(jié)尾。
f.tell() 獲得文件指針位置。
f.truncate([size]) 截取文件,使文件的大小為size。
f.write(string) 把string字符串寫入文件。
f.writelines(list) 把list中的字符串一行一行地寫入文件。
?

示例

1.文件的打開或創(chuàng)建

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
#-*- encoding:UTF-8 -*-

filehandler = open('test.txt','w')?????????????? #以寫模式打開文件,如果文件不存在則創(chuàng)建
filehandler.write('this is a file open/create test.\nthe second line.')

filehandler.close()
#!/usr/bin/env python
#-*- encoding:UTF-8 -*-

filehandler = open('test.txt','a')????? #以追加模式打開文件,如果文件不存在則創(chuàng)建

filehandler.write('\nappend the text in another line.\n')

filehandler.close()

2.讀取文件

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
#-*- encoding:UTF-8 -*-

filehandler = open('test.txt','r')??? #以讀方式打開文件,rb為二進(jìn)制方式(如圖片或可執(zhí)行文件等)
?
print 'read() function:'????????????? #讀取整個(gè)文件
print filehandler.read()
?
print 'readline() function:'????????? #返回文件頭,讀取一行
filehandler.seek(0)
print filehandler.readline()
?
print 'readlines() function:'???????? #返回文件頭,返回所有行的列表
filehandler.seek(0)
print filehandler.readlines()
?
print 'list all lines'??????????????? #返回文件頭,顯示所有行
filehandler.seek(0)
textlist = filehandler.readlines()
for line in textlist:
????? print line

print 'seek() function'?????????????? #移位到第32個(gè)字符,從33個(gè)字符開始顯示余下內(nèi)容
filehandler.seek(32)
print filehandler.read()

print 'tell() function'?????????????? #移位到文件頭,從頭開始顯示2位字符
filehandler.seek(0)
print filehandler.readline()????????? #顯示第一行內(nèi)容
print filehandler.tell()????????????? #顯示當(dāng)前位置
print filehandler.readline()????????? #顯示第二行內(nèi)容
print filehandler.read()????????????? #顯示余下所有內(nèi)容

filehandler.close()?????????????????? #關(guān)閉文件句柄

3.文件系統(tǒng)操作

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
#-*- encoding:utf-8 -*-

import os,fnmatch,glob

for fileName in os.listdir ( '/root' ):???????????????? #列出/root目錄內(nèi)容,不包括.和..
?? print fileName

os.mkdir('py')????????????????? #在當(dāng)前目錄下創(chuàng)建一個(gè)py目錄,且只能創(chuàng)建一層
os.rmdir( 'py')???????????????? #在當(dāng)前目錄下刪除py目錄,且只能刪除一層
os.makedirs('py/aa')??????????? #可創(chuàng)建多層目錄
os.removedirs('py/aa')????????? #可刪除多層目錄


print 'demonstration fnmatch module'????????????????
for fileName in os.listdir ( '/root/python/file' ):
??????? if fnmatch.fnmatch(fileName,'*.txt'):??????? #利用UNIX風(fēng)格的通配,只顯示后綴為txt的文件
??????????????? print fileName

print 'demonstration glob module'
for fileName in glob.glob ( '*.txt' ):?????????????? #利用UNIX風(fēng)格的通配,只顯示后綴為txt的文件
??????? print fileName

4.獲取文件狀態(tài)

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
#-*- encoding:UTF-8 -*-

import os,time,stat

fileStats = os.stat ( 'test.txt' )???????????????????????? #獲取文件/目錄的狀態(tài)
fileInfo = {
'Size':fileStats [ stat.ST_SIZE ],???????????????????????? #獲取文件大小
'LastModified':time.ctime( fileStats [ stat.ST_MTIME ] ),? #獲取文件最后修改時(shí)間
'LastAccessed':time.ctime( fileStats [ stat.ST_ATIME ] ),? #獲取文件最后訪問時(shí)間
'CreationTime':time.ctime( fileStats [ stat.ST_CTIME ] ),? #獲取文件創(chuàng)建時(shí)間
'Mode':fileStats [ stat.ST_MODE ]????????????????????????? #獲取文件的模式
}
#print fileInfo

for field in fileInfo:???????????????????????????????????? #顯示對(duì)象內(nèi)容
??????? print '%s:%s' % (field,fileInfo[field])

#for infoField,infoValue in fileInfo:
#?????? print '%s:%s' % (infoField,infoValue)
if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):???????????? #判斷是否路徑
??????? print 'Directory. '
else:
??????? print 'Non-directory.'

if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ):???????????? #判斷是否一般文件
?? print 'Regular file.'
elif stat.S_ISLNK ( fileStats [ stat.ST_MODe ] ):?????????? #判斷是否鏈接文件
?? print 'Shortcut.'
elif stat.S_ISSOCK ( fileStats [ stat.ST_MODe ] ):????????? #判斷是否套接字文件????
?? print 'Socket.'
elif stat.S_ISFIFO ( fileStats [ stat.ST_MODe ] ):????????? #判斷是否命名管道
?? print 'Named pipe.'
elif stat.S_ISBLK ( fileStats [ stat.ST_MODe ] ):?????????? #判斷是否塊設(shè)備
?? print 'Block special device.'
elif stat.S_ISCHR ( fileStats [ stat.ST_MODe ] ):?????????? #判斷是否字符設(shè)置
?? print 'Character special device.'
#!/usr/bin/env python
#-*- encoding:UTF-8 -*-

import os.path

fileStats = 'test.txt'

if os.path.isdir ( fileStats ):???????? #判斷是否路徑
??????? print 'Directory.'
elif os.path.isfile ( fileStats ):????? #判斷是否一般文件
??????? print 'File.'
elif os.path.islink ( fileStats ):????? #判斷是否鏈接文件
??????? print 'Shortcut.'
elif os.path.ismount ( fileStats ):???? #判斷是否掛接點(diǎn)
??????? print 'Mount point.'

stat模塊描述了os.stat(filename)返回的文件屬性列表中各值的意義。我們可方便地根據(jù)stat模塊存取os.stat()中的值。

5.串行化文件

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
#-*- encoding:UTF-8 -*-

import pickle

filehandler = open('pickle.txt','w')

text = ['this is a pickle demonstrate','aa','bb']

pickle.dump(text,filehandler)?????????? #把text的內(nèi)容序列化后保存到pickle.txt文件中

filehandler.close()

filehandler2 = open('pickle.txt')

textlist = pickle.load(filehandler2)??? #還原序列化字符串
print textlist

filehandler2.close()

#cpickle是用C寫的pickle模塊,比標(biāo)準(zhǔn)的pickle速度快很多,使用方法同pickle。

6.內(nèi)存文件

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import StringIO

fileHandle = StringIO.StringIO ( "Let freedom ring." )?? #create file in memory

print fileHandle.read() # "Let freedom ring."

fileHandle.close()

#cStringIO是用C寫的StringIO模塊,執(zhí)行速度比StringIO快。

shutil模塊是一個(gè)高級(jí)的文件處理模塊,可實(shí)現(xiàn)文件的拷貝、刪除等操作。

打開文件
打開文件程序會(huì)調(diào)用內(nèi)置的open函數(shù),首先是外部名,接著就是處理模式。

常見的文件運(yùn)算:

? Python入門篇之文件_第1張圖片

在任何情況下,Python程序中的文本文件采用字符串的形式,讀取文本時(shí)會(huì)返回字符串形式的文本

從文件中讀取的數(shù)據(jù)回到腳本時(shí)是一個(gè)字符串,所以如果字符串不是你所需的,就得將其轉(zhuǎn)換成其他類型的Python對(duì)象

實(shí)際應(yīng)用中的文件
首先看一個(gè)文件處理的一個(gè)簡(jiǎn)單的例子:

復(fù)制代碼 代碼如下:

>>> myfile=open('myfile','w')
>>> myfile.write('hello,myfile!\n')
>>> myfile.close()
>>> myfile=open('myfile')
>>> myfile.readline()
'hello,myfile!\n'
>>> myfile.readline()
''

把一行文本寫成字符串,包含行終止符\n,寫入方法不會(huì)為我們添加行終止符

在文件中存儲(chǔ)并解析Python對(duì)象
必須使用轉(zhuǎn)換工具把對(duì)象轉(zhuǎn)換成字符串,注意文件數(shù)據(jù)在腳本中一定是字符串,而寫入方法不會(huì)自動(dòng)地替我們做任何向字符串格式轉(zhuǎn)換的工作

復(fù)制代碼 代碼如下:

>>> X,Y,Z=43,324,34
>>> S='Spam'
>>> D={'a':1,'b':2}
>>> L=[1,2,3]
>>> F=open('datafile.txt','w')
>>> F.write(S+'\n')
>>> F.write('%s,%s,%s\n'%(X,Y,Z))
>>> F.write(str(L)+'$'+str(D)+'\n')
>>> F.close()

一旦我們創(chuàng)建了文件愛你就可以通過打開和讀取字符串來查看文件的內(nèi)容,而print語句則會(huì)解釋內(nèi)嵌行終止符來給用戶滿意的結(jié)果:

復(fù)制代碼 代碼如下:

>>> bytes=open('datafile.txt').read()
>>> bytes
"Spam\n43,324,34\n[1, 2, 3]${'a': 1, 'b': 2}\n"
>>> print bytes
Spam
43,324,34
[1, 2, 3]${'a': 1, 'b': 2}

鑒于Python不會(huì)自動(dòng)把字符串轉(zhuǎn)換為數(shù)字或其他類型的對(duì)象,需要使用諸如索引、加法等普通對(duì)象工具

復(fù)制代碼 代碼如下:

>>> F=open('datafile.txt')
>>> line=F.readline()
>>> line
'Spam\n'
>>> line=F.readline()
>>> line
'43,324,34\n'
>>> parts=line.split(',')
>>> parts
['43', '324', '34\n']
>>> int(parts[1])
324
>>> numbers=[int(p) for p in parts]
>>> numbers
[43, 324, 34]
>>> line=F.readline()
>>> line
"[1, 2, 3]${'a': 1, 'b': 2}\n"
>>> parts=line.split('$')
>>> parts
['[1, 2, 3]', "{'a': 1, 'b': 2}\n"]
>>> eval(parts[0])
[1, 2, 3]
>>> objects=[eval(p) for p in parts]
>>> objects
[[1, 2, 3], {'a': 1, 'b': 2}]

用pickle存儲(chǔ)Python的原生對(duì)象
使用eval可以把字符串轉(zhuǎn)換成對(duì)象,pickle模塊是能夠讓我們直接在文件中存儲(chǔ)幾乎任何Python對(duì)象的高級(jí)工具,并不要求把字符串轉(zhuǎn)換來轉(zhuǎn)換去

復(fù)制代碼 代碼如下:

>>> F=open('datafile.txt','w')
>>> import pickle
>>> pickle.dump(D,F)
>>> F.close()
>>> F=open('datafile.txt')
>>> E=pickle.load(F)
>>> E
{'a': 1, 'b': 2}

pickle模塊執(zhí)行所謂的對(duì)象序列化,也就是對(duì)象和字節(jié)字符串之間的互相轉(zhuǎn)換


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 黄色毛片在线播放 | 最新国产福利 | 日本欧美日韩 | 中文字幕亚洲一区二区va在线 | 91日韩 | 成年人福利网站 | 久久国产精品免费一区二区三区 | 日韩国产欧美精品综合二区 | 亚洲香蕉| 九九久久国产精品免费热6 九九久久精品 | 日韩免费看| 91九色视频无限观看免费 | 中文字幕影院 | 国产亚洲精品久久久久久久网站 | 国产精品 视频一区 二区三区 | 久久久久久天天夜夜天天 | 最新欧美一级视频 | 亚洲第九十七页 | 九九视频这里只有精品 | 成人午夜视频在线观看 | 欧美成视频一theporn | 欧美成人禁片在线观看网址 | 久久久国产精品视频 | 韩国女主播一区二区三区视频 | 国产成人久久 | 番茄视频在线观看黄版本免费 | 中文字幕第66页永久乱码 | www.四虎.com | 韩国高清乱理伦片中文 | aⅴ免费视频| 久久麻豆视频 | 亚洲视频1区 | 91久久亚洲最新一本 | 99热久久国产精品这里 | 日日夜夜天天人人 | 午夜狠狠操 | 韩日视频在线观看 | 波多野结衣中文字幕一区 | 日日撸夜夜撸网站 | 亚洲国产成人私人影院 | 黄色毛片免费看 |