文件操作必不可少的是 open 函数: 对文件读写之前, 需要先打开文件, 获取文件句柄
注意: open() file() 尽量使用 open(),Python3 以后不支持 file()了
1open 方法原型解释
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") | 创建空文件 |
2mode 文件操作模式
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()
- for i in fp:
- print i
把一个 file 用 for...in file 这样的循环遍历语句时, 就是调用 next()函数来实现
- fp=open(fileName,'r')
- print fp.next()
- print fp.next()
- print fp.fileno() # 判断当前操作的文件句柄是哪一个 number
- fp.close()
来源: http://www.pythontab.com/html/2018/pythonjichu_0131/1237.html