国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python入門篇之文件

2019-11-25 18:08:07
字體:
來源:轉載
供稿:網友

文件處理的函數和方法

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

復制代碼 代碼如下:

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

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

mode

 

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

bufsize

bufsize取值 描述
0 禁用緩沖
1 行緩沖
>1 指定緩沖區的大小
<1 系統默認的緩沖區大小
 

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

文件對象方法

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

示例

1.文件的打開或創建

復制代碼 代碼如下:

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

filehandler = open('test.txt','w')               #以寫模式打開文件,如果文件不存在則創建
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')      #以追加模式打開文件,如果文件不存在則創建

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

filehandler.close()

2.讀取文件

復制代碼 代碼如下:

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

filehandler = open('test.txt','r')    #以讀方式打開文件,rb為二進制方式(如圖片或可執行文件等)
 
print 'read() function:'              #讀取整個文件
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個字符,從33個字符開始顯示余下內容
filehandler.seek(32)
print filehandler.read()

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

filehandler.close()                   #關閉文件句柄

3.文件系統操作

復制代碼 代碼如下:

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

import os,fnmatch,glob

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

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


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

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

4.獲取文件狀態

復制代碼 代碼如下:

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

import os,time,stat

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

for field in fileInfo:                                     #顯示對象內容
        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 ] ):           #判斷是否塊設備
   print 'Block special device.'
elif stat.S_ISCHR ( fileStats [ stat.ST_MODe ] ):           #判斷是否字符設置
   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 ):     #判斷是否掛接點
        print 'Mount point.'

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

5.串行化文件

復制代碼 代碼如下:

#!/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的內容序列化后保存到pickle.txt文件中

filehandler.close()

filehandler2 = open('pickle.txt')

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

filehandler2.close()

#cpickle是用C寫的pickle模塊,比標準的pickle速度快很多,使用方法同pickle。

6.內存文件

復制代碼 代碼如下:

#!/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模塊,執行速度比StringIO快。

shutil模塊是一個高級的文件處理模塊,可實現文件的拷貝、刪除等操作。

打開文件
打開文件程序會調用內置的open函數,首先是外部名,接著就是處理模式。

常見的文件運算:

 

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

從文件中讀取的數據回到腳本時是一個字符串,所以如果字符串不是你所需的,就得將其轉換成其他類型的Python對象

實際應用中的文件
首先看一個文件處理的一個簡單的例子:

復制代碼 代碼如下:

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

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

在文件中存儲并解析Python對象
必須使用轉換工具把對象轉換成字符串,注意文件數據在腳本中一定是字符串,而寫入方法不會自動地替我們做任何向字符串格式轉換的工作

復制代碼 代碼如下:

>>> 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()

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

復制代碼 代碼如下:

>>> 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不會自動把字符串轉換為數字或其他類型的對象,需要使用諸如索引、加法等普通對象工具

復制代碼 代碼如下:

>>> 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存儲Python的原生對象
使用eval可以把字符串轉換成對象,pickle模塊是能夠讓我們直接在文件中存儲幾乎任何Python對象的高級工具,并不要求把字符串轉換來轉換去

復制代碼 代碼如下:

>>> 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模塊執行所謂的對象序列化,也就是對象和字節字符串之間的互相轉換

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛浦县| 娱乐| 资兴市| 游戏| 许昌市| 额敏县| 武冈市| 修武县| 鹤岗市| 泽库县| 资讯 | 连南| 巫山县| 阳谷县| 延安市| 武定县| 桂东县| 永吉县| 大埔区| 营山县| 北川| 辽宁省| 惠水县| 逊克县| 曲水县| 普兰县| 内乡县| 瑞金市| 江都市| 祁东县| 邵东县| 沭阳县| 晋城| 洛隆县| 德州市| 阿勒泰市| 罗甸县| 杂多县| 呼玛县| 巴楚县| 雷州市|