文件操作必不可少的是open函数:对文件读写之前,需要先打开文件,获取文件句柄
注意:open() file() 尽量使用open(),Python3以后不支持file()了
1、open方法原型解释
1
|
open
(file_name[,access_mode][,buffering])
|
(1)参数说明
file_name:一个包含了你要访问的文件路径及文件名称的字符串值。尽量使用绝对路径
access_mode:打开文件的方式:这个参数是非强制的,默认文件访问模式为只读(r)
r,只读
w:写之前会清空文件的内容
a:追加的方式,在原本内容中继续写
buffering:先写到缓存中
如果buffering的值被设置为0,就不会有寄存;如果值为1,访问文件时会缓存行;如果值位大于1的整数,表明了这就是寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。该参数也是非强制性的。
(2)返回值
该语句表示返回的File_object是一个指向文件的指针(一个文件对象)文件句柄。当以只读模式(r)打开一个不存在的文件时,就会报IOError异常(文件不存在),但如果是以写或追加模式(w/a/a+)打开一个不存在的文件时,默认会创建该文件,但如果是所在路径中有目录不存在,也会报IOError异常
常用方法列表
操作 | 说明 |
---|---|
os.getcwd() | 得到当前工作目录,即当前Python脚本工作的目录路径 |
os.listdir() | 返回指定目录下的所有文件和目录名 |
os.remove() | 函数用来删除一个文件 |
os.removedirs(r"c\python") | 删除多个目录 |
os.path.isfile() | 检验给出的路径是否是一个文件 |
os.path.isdir() | 检验给出的路径是否是一个目录 |
os.path.isabs() | 判断是否是绝对路径 |
os.path.exists() | 检验给出的路径是否真地存 |
os.path.split() | 返回一个路径的目录名和文件名 |
os.path.splitext() | 分离扩展名 |
os.path.dirname() | 获取路径名 |
os.path.basename() | 获取文件名 |
os.system() | 运行shell命令 |
os.getenv() 与os.putenv() | 读取和设置环境变量 |
os.linesep | 给出当前平台使用的行终止符,Windows使用'rn',Linux使用'n'而Mac使用'r' |
os.name | 指示你正在使用的平台,对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' |
os.rename(old, new) | 重命名: |
os.makedirs(r"c:\python\test") | 创建多级目录 |
os.mkdir("test") | 创建单个目录 |
os.stat(file) | 获取文件属性 |
os.chmod(file) | 修改文件权限与时间戳 |
os.exit() | 终止当前进程 |
os.path.getsize(filename) | 获取文件大小 |
os.mkdir("file") | 创建目录 |
shutil.copyfile("oldfile","newfile") | 复制文件, oldfile和newfile都只能是文件 |
shutil.copy("oldfile","newfile") | oldfile只能是文件夹,newfile可以是文件,也可以是目标目录 |
shutil.copytree("olddir","newdir") | 复制文件夹, olddir和newdir都只能是目录,且newdir必须不存在 |
os.rename("oldname","newname") | 重命名文件(目录),文件或目录都是使用这条命令 |
shutil.move("oldpos","newpos") | 移动文件(目录) |
os.remove("file") | 删除文件 |
os.rmdir("dir") | 删除目录, 只能删除空目录 |
shutil.rmtree("dir") | 空目录、有内容的目录都可以删 |
os.chdir("path") | 转换目录, 换路径 |
os.mknod("test.txt") | 创建空文件 |
2、mode文件操作模式
r,w,a
r+可读可写
w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
模式列表
操作 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 以写方式打开, |
a | 以追加模式打开 (从 EOF 开始, 必要时创建新文件) |
r+ | 以读写模式打开 |
w+ | 以读写模式打开 (参见 w ) |
a+ | 以读写模式打开 (参见 a ) |
rb | 以二进制读模式打开 |
wb | 以二进制写模式打开 (参见 w ) |
ab | 以二进制追加模式打开 (参见 a ) |
rb+ | 以二进制读写模式打开 (参见 r+ ) |
wb+ | 以二进制读写模式打开 (参见 w+ ) |
ab+ | 以二进制读写模式打开 (参见 a+ ) |
3、通过open获取到的文件句柄可以对文件作的其他操作
(1)fp.closed
判断文件是否已经关闭。返回true如果文件已被关闭,否则返回false
(2)fp.mode
输出读写模式。返回被打开文件的访问模式。
(3)fp.name:
返回文件的名称。
(4) fp.softspace
如果用print输出后,是否跟一个空格符,false不打印,true则打印。
(5)fp.close()
刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
(6)flush()
把缓冲区中的内容持久化写到磁盘里
缓存区写满的情况,系统会自动调用flush()方法。
调用flush的时机:写入了多少长度的数据,或者间隔了多长的时间
如果没有flush(),持久化内容丢失
(7)next()
1
2
|
for
i
in
fp:
print
i
|
把一个file用for...in file这样的循环遍历语句时,就是调用next()函数来实现。
1
2
3
4
5
|
fp
=
open
(fileName,
'r'
)
print
fp.
next
()
print
fp.
next
()
print
fp.fileno()
#判断当前操作的文件句柄是哪一个number
fp.close()
|