python-文件操作(1)

本文內容涉及python打開/創建文件對象,文件的讀寫、文件指針位置的移動、獲取命令行參數。

1. open()
open函數以指定模式返回一個file對象,如: file_object = open(filename,access_mode=’r',buffering=-1),默認是以r模式打開文件。

filename:表示要打開文件名(字符串),可以是絕對路徑或相對路徑
access_mode:文件打開的模式(字符串), 常用的模式有’r',’w',’a',不是很常用的還有’u'和’b’
‘r’模式:以讀方式打開,不能進行寫操作,文件必須是已經存在的
‘r+’模式:以讀寫方式打開,文件必須是已經存在的
‘w’模式:以寫方式打開,不能進行讀操作,若文件存在,則先清空,然後重新創建;若不存在,則創建文件
‘w+’模式:以讀寫方式打開,若文件存在,則先清空,然後重新創建;若不存在,則創建文件
‘a’模式:以追加方式打開,不能進行讀操作,把數據追加到文件的末尾;若不存在,則創建文件
‘a+’模式:以讀寫方式打開,把數據追加到文件的末尾;若不存在,則創建文件
‘b’模式:以二進制模式打開,不能作爲第一個字符出現,需跟以上模式組合使用,如’rb’,'rb+’等,
‘u’模式:表示通用換行符支持,文件必須是已經存在的

buffering:表示訪問文件採用的緩衝方式,0表示不緩衝,1表示緩衝一行數據,其他大於1的值表示使用給定值作爲緩衝區大小,負數表示使用系統默認緩衝機制,默認是-1,一般使用系統默認方式。

2. file()
file是一個類,file()以指定模式創建一個file對象,跟open()具有相同的功能,可以任意替換。一般使用open來創建一個file對象,使用isinstance(obj,file)來判斷obj是否是一個文件對象。

3.read()、readline()、readlines()
read():讀取指定數目個字節到字符串中,負數將讀取至文件末尾,默認是-1

>>> file_obj = open('test.txt','r')
>>> file_obj.read()
'dfdff\n'
>>> file_obj.seek(0)
>>> file_obj.read(0)
''
>>> file_obj.read(1)
'd'
>>> file_obj.read(2)
'fd'
>>> file_obj.read(-1)
'ff\n'
>>> file_obj.seek(0)
>>> file_obj.read(1000)
'dfdff\n'
>>> file_obj.seek(0)
>>> file_obj.read(-5)
'dfdff\n'
readline():讀取文件的一行,包括行結束符,可以制定size參數的值,默認是-1
>>> file_obj = open('test.txt','r')
>>> file_obj.readline()
'dfdff\n'
>>> file_obj.readline(2)
'al'
>>> file_obj.readline(-1)
'exzhou\n'

readlines():讀取所有剩餘的行,然後作爲一個字符串列表返回
>>> file_obj.seek(0)
>>> file_obj.readlines()
['dfdff\n', 'alexzhou\n', 'zhoujianghai\n']

4. write()、writelines()
ps:這兩個方法都不會自動加上行結束符,需在寫入數據前自己加上
>>> file_obj = open('test.txt','w+')
>>> file_obj.write('alexzhou')
>>> file_obj.write(' python')
>>> file_obj.seek(0)
>>> file_obj.readline()
'alexzhou python'
 
>>> l = ['my','name','is','zhoujianghai']
>>> l = ' '.join(l)
>>> file_obj.writelines(l)
>>> file_obj.seek(0)
>>> file_obj.readline()
'alexzhou pythonmy name is zhoujianghai'
 
>>> file_obj.write('hello \n')
>>> file_obj.write('world \n')
>>> file_obj.seek(0)
>>> file_obj.readline()
'alexzhou pythonmy name is zhoujianghaihello \n'
>>> file_obj.readline()
'world \n'

5. seek()、tell()
seek():移動文件指針到不同的位置,可以指定偏移量和起始位置。起始位置0表示從文件頭開始,1表示從當前位置開始,2表示從文件尾開始,默認是0.
tell():表示當前文件指針在文件中的位置,從文件頭算起。
>>> file_obj.seek(0)
>>> file_obj.tell()
0
>>> file_obj.seek(5)
>>> file_obj.tell()
5
 
>>> file_obj.seek(5,1)
>>> file_obj.tell()
10
>>> file_obj.seek(5,2)
>>> file_obj.tell()
57
>>> file_obj.seek(5,0)
>>> file_obj.tell()
5

6. 文件迭代和關閉文件
可以使用for循環一行一行讀取文件
>>> file_obj = open('test.txt','w+')
>>> file_obj.write('hello \n')
>>> file_obj.write('world \n')
>>> file_obj.seek(0)
>>> for eachline in file_obj:
...     print eachline,
... 
hello 
world
>>> file_obj.close()

ps:print後面加一個分號的作用:避免print語句默認在打印的內容後面加一個換行符號。

7. os模塊常用屬性
由於各操作系統的行分隔符和文件分隔符不一樣,所以可以使用os模塊的以下屬性避免代碼移植時碰到這些問題。

os.linesep 行分隔符字符串
os.sep 文件分隔符字符串
os.pathsep 路徑分隔符字符串
os.curdir 當前目錄字符串
os.pardir 父目錄字符串

看下面的打印結果

>>> import os
>>> os.sep
'/'
>>> os.linesep
'\n'
>>> os.pathsep
':'
>>> os.curdir
'.'
>>> os.pardir
'..'

8. 獲取命令行參數
創建argv.py文件,輸入下面代碼
import sys
 
commands = sys.argv
print commands

執行:pyton argv.py 123,打印結果:

['argv.py', '123']


轉載請註明來自:Alex Zhou,本文鏈接:http://codingnow.cn/python/372.html

發佈了60 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章