【Python】文件处理总结

一,文件操作

1,文件打开

open(filename,mode)
#filename:文件路径
#mode:打开方式

文件打开方式:

python整理jira Python整理文档总结_Python


(1)默认以只读方式打开。

(2)使用‘r+’方式可读写,并且文件指针在文件开头,并不清空文件内容。

(3)“w”和“w+”方式打开时,文件不存在则自动创建文件,文件存在则先将文件内容清空。若要避免清除,可以使用‘a’方式追加写入到文件末尾。

(4)使用‘+’方式,既可以读又可以写。

2,文件读取

read(size):读取文件,读取size字节,默认读取全部。
readline(size):读取一行
readlines(size):读取完所有内容,返回每一行组成的列表;
iter:使用迭代器读取文件。

(1)readline设置size大小时,len(line) > size return size,len (line) < size return len(line)。
(2)默认缓存大小:io.DEFAULT_BUFFER_SIZE
(3)使用迭代器遍历文件,按行遍历

iter :使用迭代器读取文件
f = open(filename)
iter_f = iter(f)
lines = 0 
for  line  in iter_f:
     lines + =1

3,文件写入与写缓存

write(str):将字符串写入文件
writelines(seq_of_strings):写多行到文件,参数为可迭代对象

(1)writelines的参数必须是字符串序列,元组,迭代器。
(2)写缓存,调用write后先将内容写入都“文件缓冲”中,当调用close(),或者flush()后,才会将内容写到设备中,并清除缓冲。
(3)当写入的内容大于缓存区容量时,会自动将内容写入设备。
4,文件关闭
(1)为什么要关闭文件?
1,将写缓存同步到磁盘文件中。
2,系统中打开文件的个数有限制,超过限制将无法打开。
(2)可以使用with语句避免忘记关闭

with open("somefile.txt") as file:
    data = file.read()

5,文件指针

文件读写过程可能会存在以下问题:

1,写入文件时,无法读取已经写入的文件,只有关闭后再打开才可以读取到,

2,读取文件时,无法再次读取已经读取过的内容。

其实这跟文件指针有关,当我们对文件操作时,文件内部会有一个文件指针移动来定位当前位置。刚才的问题图解:

python整理jira Python整理文档总结_文件操作_02


当open时文件指针是在初始位置1,当写入4个字节内容是文件指针位置就在4,再read时,文件指针从4移到6,所以,无法读取到前面写入的内容。

python整理jira Python整理文档总结_Python_03


当open时文件指针是在初始位置1,当读取3个字节内容是文件指针位置就在3,再read时,文件指针从3移到5,所以,无法读取到前面刚读取的内容。

文件指针操作:

seek(offset, whence):移动文件指针
offset:偏移量,可为负数
whence:偏移相对位置

偏移相对位置为os模块当中的SEEK_SET、SEEK_CUR、SEEK_END:

os.SEEK_SET:表示文件的相对起始位置
os.SEEK_CUR:表示文件的相对当前位置
os.SEEK_END:表示文件的相对结束位置

若要查看当前文件偏移量可以使用tell()方法

f = open('test.txt','w')  
f.tell()   #0
f.write('123456') 
f.tell()   #6

二,文件属性

1,文件属性

f.fileno():文件描述符
f.mode:文件打开权限
f.encoding:文件编码格式
f.closed:文件是否关闭

2,标准文件

文件标准输入:sys.stdin    文件描述符:0
文件标准输出:sys.stdout    文件描述符:1
文件标准错误:sys.stderr      文件描述符:2

3,文件命令行参数
sys模块提供sys.argv属性,通过该属性可以得到命令行参数。sys.argv为字符串列表。

import sys
if __name__ =='__main__':
        print (len(sys.argv))
        for arg in sys.argv:
                print (arg)

三,os模块与shutil模块

1,os模块

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\python”)
运行shell命令: os.system()
读取和设置环境变量:os.getenv() 与os.putenv()
给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',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.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检查是否快捷方式os.path.islink ( filename )
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split() 
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
获取文件大小:os.path.getsize(filename)

2,shutil模块

目录操作:
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") 换路径