python:open/文件操作
open/文件操作
f=open('/tmp/hello','w')
#open(路徑+文件名,讀寫模式)
如何打開文件
handle=open(file_name,access_mode="r")
file_name 變量包含我們希望打開的文件的字符串名稱,access_mode 中的'r'表示讀取,‘w’表示寫入,'a'表示添加,其它可能用到的標實還有‘+’表示讀寫,‘b’表示2進制訪問,如果未提供access_mode,默認為“r”.
如果open()成功,一個文件對象句柄會被返回。
fobj = open(filename, ' r ' )
for eachline in fobj:
print eachline,
fobj.close()
# 還記得 print 后面跟的“,”是什么意思吧,表示【每次打印都不換行,而是間隔空格】
file()內建函數它的功能等於open(),但是可以看出,他是個文件工廠(生成文件對象),類似於int()生成整型對象,dict()生成字典對象,后面會學習
#讀寫模式:r只讀,r+讀寫,w新建(會覆蓋原有文件),a追加,b二進制文件.常用模式
如:'rb','wb','r+b'等等
讀寫模式的類型有:
rU 或 Ua 以讀方式打開, 同時提供通用換行符支持 (PEP 278)
w 以寫方式打開,
a 以追加模式打開 (從 EOF 開始, 必要時創建新文件)
r+ 以讀寫模式打開
w+ 以讀寫模式打開 (參見 w )
a+ 以讀寫模式打開 (參見 a )
rb 以二進制讀模式打開
wb 以二進制寫模式打開 (參見 w )
ab 以二進制追加模式打開 (參見 a )
rb+ 以二進制讀寫模式打開 (參見 r+ )
wb+ 以二進制讀寫模式打開 (參見 w+ )
ab+ 以二進制讀寫模式打開 (參見 a+ )
注意:
1、使用'W',文件若存在,首先要清空,然后(重新)創建,
2、使用'a'模式 ,把所有要寫入文件的數據都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,將自動被創建。
f.read([size]) size未指定則返回整個文件,如果文件大小>2倍內存則有問題.f.read()讀到文件尾時返回""(空字串)
file.readline() 返回一行
file.readline([size]) 返回包含size行的列表,size 未指定則返回全部行
for line in f: print line #通過迭代器訪問
f.write("hello\n") #如果要寫入字符串以外的數據,先將他轉換為字符串.
f.tell() 返回一個整數,表示當前文件指針的位置(就是到文件頭的比特數).
f.seek(偏移量,[起始位置])
用來移動文件指針
偏移量:單位:比特,可正可負
起始位置:0-文件頭,默認值;1-當前位置;2-文件尾
f.close() 關閉文件
Code:
#!/usr/bin/env python # Filename: using_file.py poem='''\Programming is funWhen the work is doneif you wanna make your work also fun: use Python!''' f=file('poem.txt','w') # open for 'w'riting f.write(poem) # write text to file f.close() # close the file f=file('poem.txt') # if no mode is specified, 'r'ead mode is assumed by default while True: line=f.readline() if len(line)==0: # Zero length indicates EOF break print line, # Notice comma to avoid automatic newline added by Python f.close() # close the file |
read()使用及用法
我們談到“文本處理”時,我們通常是指處理的內容。Python 將文本文件的內容讀入可以操作的字符串變量非常容易。文件對象提供了三個“讀”方法: .read()、.readline() 和 .readlines()。每種方法可以接受一個變量以限制每次讀取的數據量,但它們通常不使用變量。 .read() 每次讀取整個文件,它通常用於將文件內容放到一個字符串變量中。然而 .read() 生成文件內容最直接的字符串表示,但對於連續的面向行的處理,它卻是不必要的,並且如果文件大於可用內存,則不可能實現這種處理。
.readline() 和 .readlines() 非常相似。它們都在類似於以下的結構中使用:
fh = open('c:\\autoexec.bat') for line in fh.readlines(): print line |
.readline() 和 .readlines() 之間的差異是后者一次讀取整個文件,象 .read() 一樣。.readlines() 自動將文件內容分析成一個行的列表,該列表可以由 Python 的 for ... in ... 結構進行處理。另一方面,.readline() 每次只讀取一行,通常比 .readlines() 慢得多。僅當沒有足夠內存可以一次讀取整個文件時,才應該使用 .readline()。
seek的使用方法
seek():移動文件讀取指針到指定位置
tell():返回文件讀取指針的位置
seek()的三種模式:
(1)f.seek(p,0) 移動當文件第p個字節處,絕對位置
(2)f.seek(p,1) 移動到相對於當前位置之后的p個字節
(3)f.seek(p,2) 移動到相對文章尾之后的p個字節
最后:
• close – 關閉文件。跟你編輯器的 文件 -> 保存.. 一個意思。
• read – 讀取文件內容。你可以把結果賦給一個變量。
• readline – 讀取文本文件中的一行。
• truncate – 清空文件,請小心使用該命令。
• write(stuff) – 將 stuff 寫入文件。