raw_input 和 argv 是操作文件的基礎(chǔ),不熟悉的需要回到上節(jié)繼續(xù)練習(xí)。
一、代碼分析
#coding:utf-8
from sys import argv ?#導(dǎo)入模塊
script, filename = argv ? #獲取腳本名和文件名
txt = open(filename) ? #打開(kāi)文件
print "Here's your file %r:" % filename
print txt.read() ?#讀取文件內(nèi)容
print "Type the filename again:"
file_again = raw_input("> ") #獲取用戶(hù)輸入
txt_again = open(file_again) #打開(kāi)文件
print txt_again.read() #讀取文件
這里有兩個(gè)新函數(shù)open() 和 read()。
首先在命令行下使用幫助,查看兩個(gè)函數(shù)的信息
1.open( )
E:\lszyy\python\examples>python -m pydoc open
Help on built-in function open in module __builtin__:
open(...)
open(name[, mode[, buffering]]) -> file object
Open a file using the file() type, returns a file object.? This is the
preferred way to open a file.? See file.__doc__ for further information.
注意open( )函數(shù)的參數(shù),文件名是必須的,打開(kāi)模式,緩沖區(qū)是可選的。
返回一個(gè)文件對(duì)象,以便后續(xù)對(duì)文件進(jìn)行操作,相當(dāng)于一個(gè)指向文件的指針。
2.read( )
E:\lszyy\python\examples>python -m pydoc read
no Python documentation found for 'read'
這樣查沒(méi)有任何信息,需輸入以下命令查詢(xún)r(jià)ead函數(shù)的幫助信息
E:\lszyy\python\examples>python -m pydoc file
按回車(chē)鍵,直到看到read函數(shù)的信息:
|? read(...)
|? ? ? read([size]) -> read at most size bytes, returned as a string.
|? ? ? If the size argument is negative or omitted, read until EOF is reached.
|? ? ? Notice that when in non-blocking mode, less data than what was requested
|? ? ? may be returned, even if no size parameter was given.
read函數(shù)有個(gè)最大字節(jié)數(shù)的參數(shù),返回一個(gè)字符串。
如果參數(shù)沒(méi)有給出,read直到EOF標(biāo)志出現(xiàn)。在非阻塞模式下,即使沒(méi)有給出size參數(shù),返回的數(shù)據(jù)可能少于請(qǐng)求的數(shù)據(jù)。
何謂非阻塞模式?
運(yùn)行代碼,輸入一個(gè)不存在的文件名,將獲得一個(gè)IO異常(IOError)
E:\lszyy\python\examples>python test4.py t.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Traceback (most recent call last):? File "test4.py", line 5, intxt = open(filename)
IOError: [Errno 2] No such file or directory: 't.txt'
新建一個(gè)文本測(cè)試文件:t.txt,輸入一些測(cè)試字符“123456789abcdefghijklmnopqrstuvwxyz”.
E:\lszyy\python\examples>python test4.py t.txt
Here's your file 't.txt':
123456789abcdefghijklmnopqrstuvwxyz
Type the filename again:
> t.txt
123456789abcdefghijklmnopqrstuvwxyz
二、open函數(shù)中的mode參數(shù)
讀寫(xiě)模式的類(lèi)型有:
r ? ? ?以讀方式打開(kāi), 同時(shí)提供通用換行符支持 (PEP 278)
w?????以寫(xiě)方式打開(kāi),
a?????以追加模式打開(kāi) (從 EOF 開(kāi)始, 必要時(shí)創(chuàng)建新文件)
r+?????以讀寫(xiě)模式打開(kāi)
w+?????以讀寫(xiě)模式打開(kāi) (參見(jiàn) w )
a+?????以讀寫(xiě)模式打開(kāi) (參見(jiàn) a )
rb?????以二進(jìn)制讀模式打開(kāi)
wb?????以二進(jìn)制寫(xiě)模式打開(kāi) (參見(jiàn) w )
ab?????以二進(jìn)制追加模式打開(kāi) (參見(jiàn) a )
rb+????以二進(jìn)制讀寫(xiě)模式打開(kāi) (參見(jiàn) r+ )
wb+????以二進(jìn)制讀寫(xiě)模式打開(kāi) (參見(jiàn) w+ )
ab+????以二進(jìn)制讀寫(xiě)模式打開(kāi) (參見(jiàn) a+ )
注意:
1、使用'W',文件若存在,首先要清空,然后(重新)創(chuàng)建,
2、使用'a'模式 ,把所有要寫(xiě)入文件的數(shù)據(jù)都追加到文件的末尾,即使你使用了seek()指向文件的其他地方,如果文件不存在,將自動(dòng)被創(chuàng)建。