raw_input 和 argv 是操作文件的基础,不熟悉的需要回到上节继续练习。
一、代码分析
#coding:utf-8
from sys import argv #导入模块
script, filename = argv #获取脚本名和文件名
txt = open(filename) #打开文件
print "Here's your file %r:" % filename
print txt.read() #读取文件内容
print "Type the filename again:"
file_again = raw_input("> ") #获取用户输入
txt_again = open(file_again) #打开文件
print txt_again.read() #读取文件
这里有两个新函数open() 和 read()。
首先在命令行下使用帮助,查看两个函数的信息
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( )函数的参数,文件名是必须的,打开模式,缓冲区是可选的。
返回一个文件对象,以便后续对文件进行操作,相当于一个指向文件的指针。
2.read( )
E:\lszyy\python\examples>python -m pydoc read
no Python documentation found for 'read'
这样查没有任何信息,需输入以下命令查询read函数的帮助信息
E:\lszyy\python\examples>python -m pydoc file
按回车键,直到看到read函数的信息:
| 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函数有个最大字节数的参数,返回一个字符串。
如果参数没有给出,read直到EOF标志出现。在非阻塞模式下,即使没有给出size参数,返回的数据可能少于请求的数据。
何谓非阻塞模式?
运行代码,输入一个不存在的文件名,将获得一个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'
新建一个文本测试文件:t.txt,输入一些测试字符“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函数中的mode参数
读写模式的类型有:
r 以读方式打开, 同时提供通用换行符支持 (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()指向文件的其他地方,如果文件不存在,将自动被创建。