Python:文件操作

Posted Volcano!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:文件操作相关的知识,希望对你有一定的参考价值。

一、文件打开方式

格式:open(file, mode = \'r\', buffering = -1, encoding = None, errors = None, newline = None, closefd = True, open = None)

==>一般常用file、mode两个参数;

#file:被打开文件所在地址 + 文件名;若只有文件名,认为是在当前目录下打开文件(正则执行的.py文件所有文件夹);默认位置为当前;

#mode:文件打开的模式;

#buffering:指定文件缓冲模式及缓冲区的大小;

  A、buffering = n,n > 1 :设定缓冲模式为全缓冲,缓冲区大小为n个字节;

  B、buffering = 1:设定缓冲模式为行缓冲,遇到换行符 \'\\n\' 时进行系统调用,也就是I/O操作,将数据写入磁盘;

  C、buffering = 0:此为无缓冲你模式,只要有数据,就直接进行系统调用,也就是进行I/O操作,将数据写入磁盘;

  #系统调用:向操作系统申请一个服务,操作系统响应后,帮助调用硬件的驱动程序,这种操作也称为I/O操作;

(可参考:问题22:如何设置文件的缓冲

 

模式 执行操作
‘r’ 以只读方式打开文件(默认);#若文件不存在,报异常,不新建;
‘w’ 以写入的方式创建新文件;#若文件名存在,将其覆盖;
‘x’ 新建文件;#如果文件存在,引发异常;
‘a’  以写入方式打开文件;#若文件存在,可在文件后追加内容;若文件不存在,新建文件;
‘b’ 以二进制模式打开文件;#如‘rb’、‘wb’、‘ab’、‘xb’等;
‘t’ 以文本模式打开文件(默认);
‘+’ k可读写模式;(添加到其它模式中使用)
‘U’ 通用换行符支持

f = open(\'test.txt\', \'w\') s = \'这小伙真帅\' f.write(s) f.close f = open(\'test.txt\') print(type(f)) #输出:<class \'_io.TextIOWrapper\'> #_io.TextIOWrapper:是什么意思? print(list(f)) #输出:[\'这小伙真帅\']

 二、文件对象的方法

文件对象的方法 执行操作 语法格式
close() 关闭文件; f.close()
read(size = -1)

从文件中读取size个字符(不是字节),若未给定size值或给负值时,

读取剩余的(从文件指针位置)所有字节然后做为字符串返回;

f.read(n):

从指针位置起,读取n个字节

readline() 从文件指针位置开始,读取一整行字符串;#一整行:以换行符 ‘\\n’ 来分行; f.read()
write(str) 将字符串写入文件;  #所写入的数据必须是字符串; f.write(\'字符串\')
writelines(sep) 向文件写入字符串序列sep;#sep是一个返回字符串的可迭代对象,不是字符串本身; f.writelines(字符串的可迭代对象)
seek(offset, from)

移动文件指针;#从offset(0/1/2)处,偏移from个字节;

#0代表文件起始位置;1代表指针当前位置;2代表文件末尾;

#from为具体的正整数;

f.seek(1, size):

#从当前指针位置移动size个字节;

tell() 返回指针当前位置;#结果为正整数,表示指针距离文件起始位置的字节数; f.tell()

 

 #文件指针:相当于一个‘书签’,对文件进行引索、读取、写入时,从指针位置开始操作;

#一个字符是1个字节;一个汉字是2个字节;

#文件本身可以看做是一个字符串,读取文件时,返回文件对象,可以被迭代操作,与字符串迭代操作一样;

f = open(\'test.txt\', \'w\')
for i in f:
    print(i)
#输出:这小伙真帅

 

三、python文件系统方法

 1)OS模块中关于文件/目录常的函数

#对于文件系统的访问,Python一般通过OS模块来实现;

#Python是夸平台的语言:同样的源代码在不同的操作系统上执行时,不需要修改;

#OS:系统模块;(Operating System)

#使用OS模块下的方法前,先导入OS模块:import os

 

 OS模块中关于文件/目录常的函数

 

函数名 功能 语法格式
getcwd() 返回当前工作目录;#即当前工作的物理地址 os.getcwd()
chdir(path) 改变工作目录;#path指代需要切换到的目录 os.chdir(path)
listdir(path = \'.\')

l列举指定目录中的文件名(包含文件夹的名字),其中文件名带格式(如\'.py\'、\'.txt\'),以[\'str1\', \'str2\']形式返回;

#\'.\':表示当前工作目录,也是默认值; #\'..\':表示工作目录的上一层目录;

#path指定具体地址,如(\'E:\\pythonwj\'):返回指定地址下的文件名;

os.listdir(path = \'.\')
mkdir() 在当前工作目录下,创建单个文件夹(不是文件);#如果文件夹已存在,抛出异常; os.mkdir()
makedirs(path)

在指定目录下,创建多层文件夹;#如果文件夹已存在,抛出异常;

#例1:os.makedirs(r\'.\\a\\b\\c\'):a在当前工作目录下,b在a文件夹下,c在b文件夹下;

#r\'.\\a\\b\\c\':要加r,表示原始字符串;若在当前工作目录下创建,要加 \'.\\\' ;

#例2:os.makedirs(r\'E:\\pythonwj\\a\\b\\c\')

os.makedirs(path)

 remove(path) 删除当前工作目录下指定的文件;#不是文件夹   os.remove(path)
rmdir(path)  删除当前工作目录下指定的单层文件夹;#文件下不在有其它文件;  os.rmdir(path) 
removedirs(path) 

删除当前工作目录下指定的多层文件;#连同文件夹下的其它文件夹同时删除;

#os.removedirs(r\'a\\b\\c\'):删除当前工作目录下的a文件夹,以及a文件夹下的b、c文件夹; 

os.removedirs(path) 
rename() 

重命名当前工作目录下的文件夹或文件;

#os.rename(\'文件名1/文件夹名1\', \'文件名2/文件夹名2\'):

==>将当前目录下的文件1/文件夹1,更名为 文件2/文件夹2

 os.rename(name1,name2)
 system()

s使用系统的小工具;

#例:os.system(\'calc\'):打开系统的计算器; 

 os.system(\'小工具代码\')
 walk(top)

 遍历top参数指定路径下的所有子目录,并将结果返回一个三元组(路径, [包含目录], [包含文件])

#top:需要遍历的顶级目录的路径

 os.walk(top)

 

 扩展

os.curdir表示当前目录(\'.\');

os.pardir表示上一级目录(\'..\');

os.sep表示路径的分隔符,比如Windows系统下为‘\\\\’,Linux系统下为‘/’;

os.linesep表示当前平台使用的行中支符;(Windows下为‘\\r\\n’,Linux下为‘\\n’)

os.name表示当前使用的操作系统;

import os
print(os.sep)
#输出:\\

#walk(top)用法,及与os.path.walk()的区别,参见:Python:os.walk()和os.path.walk()用法

实例:

import os

for i in os.walk(r\'E:\\pythonwj\'):
    print(i)
#输出:
# (\'E:\\\\pythonwj\', [\'Chapter_2\', \'Chapter_3\', \'Chapter_4\', \'Chapter_5\', \'Chapter_6\'], [])
# (\'E:\\\\pythonwj\\\\Chapter_2\', [], [\'0_0.py\', \'2_1.py\', \'2_2.PY\', \'2_3.py\'])
# (\'E:\\\\pythonwj\\\\Chapter_3\', [], [\'0-0.py\', \'3-1.py\', \'3-3-1.py\', \'3-3-2.py\', \'3-4.py\', \'3-5.py\'])
# (\'E:\\\\pythonwj\\\\Chapter_4\', [], [\'0-0.py\', \'0.py\', \'00.py\', \'4-1.py\', \'4-2.py\', \'4-4.py\', \'4-5.py\', \'4-6.py\', \'record.txt\', \'test.txt\', \'test_1.txt\', \'test_2.txt\', \'test_3.txt\', \'txt\'test_2.txt\', \'test_3.txt\', \'txt.py\'])
# (\'E:\\\\pythonwj\\\\Chapter_5\', [], [])
# (\'E:\\\\pythonwj\\\\Chapter_6\', [], [])

 

 二)os.path模块中关于路径常用的函数

os.path模块中关于路径常用的函数
函数名 功能及使用方法
basename(path) 去掉目录路径,单独返回文件名
dirname(path) 去掉文件名,单独返回目录路径;
join(path1[, path2[, ...]]) 将path1和path2各部分组合成一个路径名;#多用于创建文件时,指定该文件的路径:os.path.join(path, file)
split(path)

分割文件名和路径,返回(f_path, f_name)元组;

#如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在;

splitext(path) 分离文件名和扩展名,返回(f_name, f_extension)元组;
getsize(file) 返回指定文件的尺寸,单位字节;
getatime(file) 返回指定文件最近访问的时间:浮点型秒数;(可用time模块的gmtime()或者localtime()函数换算)
getctime(file) 返回指定文件的创建时间:浮点型秒数;(可用time模块的gmtime()或者localtime()函数换算)
getmtime(file) 返回指定文件最新的修改时间:浮点型秒数;(可用time模块的gmtime()或者localtime()函数换算)

 扩展:os.path.abspath(path):获取指定文件的路径,不含文件名;

以下函数返回True或False

函数名 功能与使用方法
exists(path) 判断指定路径(目录或者文件)是否存在
isabs(path) 判断指定路径是否为绝对路径
isdir(path) 判断指定路径是否存在且是一个目录
isfile(path) 判断指定路径是否存在且是一个文件
islink(path) 判断指定路径是否存在且是一个符号链接
ismount(path) 判断指定路径是否存在且是一个挂载符
samefile(path1, path2) 判断path1和path2两个路径是否指向同一个文件

 

四、pickle模块

 1)功能:多用于直接将一个完整的列表、字典、类的实例,存储到文件内;

  #当然,它可以保持任何想保存的数据;

 2)思路:将列表、字典、类的实例,这些数据,转换成二进制的形式进行存储;

 3)格式:

  1)pickle.dump(数据, 文件/文件对象):将数据存入文件;

  2)my_date = pickle.load(文件/文件对象):读取数据;

 4)注意事项:

  A、打开文件,要以二进制形式;

  B、为便于区分记忆,此类文件后缀,建议使用:.pkl或.pickle;

 

 #此类文件为二进制文件,无法用记事本打开,打开时会显示乱码;

以上是关于Python:文件操作的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

使用 Python 代码片段编写 LaTeX 文档

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程