Treasuring every moment
open函數
open(name[,mode[,buffering]])
mode有四種模式可選擇:
- 'r' 讀模式
- 'w' 寫模式
- 'a' 追加模式
- 'b' 二進制模式(可添加到其他模式中使用) 'rb' 可讀二進制模式
- '+' 讀/寫模式
寫
>write():參數為寫入的内容
>>> f = open('somefile.txt','w')
f.write('Hello, ')
7
>>> f.write('World!')
6
>>> f.close()
>writelines():參數為一個字元串清單,它會把所有的字元串寫入檔案,但不會增加新的行
讀
read():參數為指定讀多少字元(位元組)
>>> f = open('somefile.txt','r')
>>> f.read(4)
'Hell'
>>> f.read(1)
'o'
>>> f.read()
', World!'
readline():讀一行,包括換行符也一起讀進來
readlines():讀取檔案的所有行并将其轉換為清單傳回
管式輸出
demo.py
import sys
text = sys.stdin.read()
words = text.split()
wordcount=len(words)
print('Wordcount:',wordcount,'Text:',text)
somefile.txt
Hello,World!
運作程式
$ cat somefile.txt | python demo.py
('Wordcount:', 1, 'Text:', 'Hello,World!')
可以看出,管道符号(|)将一個指令的标準輸出和下一個指令的标準輸入連接配接在一起了。
随機通路
以上對檔案的操作都是把檔案當成流來進行操作,隻能按照從頭到尾的順序讀取資料。但是我們可以使用類檔案對象的方法seek和tell來直接通路感興趣的部分。
seek(offset[,whence ]):這個方法把目前位置移動到由offset和whence定義的位置。Offset類是一個位元組(字元)數,表示偏移量。whence預設是0,表示偏移量是從檔案開頭開始計算的(這是偏移量必須是非負的)。
>>> f = open('somefile.txt','w')
>>> f.write('0123456789')
>>> f.seek(5)
>>> f.write('hello,world')
>>> f.close()
>>> f = open('somefile.txt')
>>> f.read()
'01234hello,world6789'
tell():傳回目前檔案的位置
>>> f = open('somefile.txt')
>>> f.read(3)
'012'
>>> f.read(2)
'34'
>>> f.tell()
5