Python文件操作
- 文件操作主要讲解以下内容:
- 1.文件本身的操作(python内置)
- 2.系统中文件和文件夹的操作(os和shutil模块当中)
- 3.系统路径相关操作(os模块中的子模块 os.path)
文件的基本操作:
- open() 打开或者创建一个文件
格式:open('文件路径','打开模式') 返回值:文件io对象 打开模式一共N种: w模式 写模式write 文件不存在时会创建文件,如果文件已存在则会清空文件 r模式 读模式read 文件不存在就报错,存在则准备读取文件 a模式 追加模式 append 文件不存在则新建,文件存在则在文件末尾追加内容 x模式 抑或模式 xor 文件存在则报错,文件 不存在则新建文件 b模式 二进制模式 binary 辅助模式不能单独使用 +模式 增强模式plus 也是辅助模式不能单独使用
- 以上模式可以互相组合:wrax不可以互相组合:
模式 | 说明 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
- close() 关闭文件
格式:文件io对象.close() 返回值:None
- 示例如下:
# 新建一个文件,文件名为:test.txt f = open('test.txt', 'w') # 关闭这个文件 f.close()
读写函数:
- read() 读取文件
格式:文件io对象.read() 返回值:整个文件的字符 格式:文件io对象.read(字符长度) 返回值:指定长度的字符
f = open('test.txt', 'r') content = f.read(5) print(content) print("-"*30) content = f.read() print(content) f.close()
- readline() 读取一行文件
格式:文件io对象.readline() 返回值:一行内容的字符串 格式:文件io对象.readline(字符长度) 返回值:一行内容的字符串 注意:字符长度<当前行内内容,则读取指定长度的字符串,并且下次再读取还是在 这个一行中获取没有读取的内容。字符长度>=当前行内容,直接读取当前行
#coding=utf-8 f = open('test.txt', 'r') content = f.readline() print("1:%s"%content) content = f.readline() print("2:%s"%content) f.close()
- readlines() 将文件中的内容读取到序列当中。
格式:文件io对象.readlines() 返回值:列表 格式:文件io对象.readlines(字符长度) 返回值:列表 注意:读取的行数由字符长度决定,如果字符长度读取了N行后,还有指定长度的字符 没有读取,则直接读取下一行进来
#coding=utf-8 f = open('test.txt', 'r') content = f.readlines() print(type(content)) i=1 for temp in content: print("%d:%s"%(i, temp)) i+=1 f.close()
- write() 写入文件
格式:文件io对象.write(字符串) 返回值:写入字符串的长度
- writelines() 将序列写入文件中
格式:文件io对象.writelines(序列) 返回值:None
- truncate() 字符串截取操作
格式:文件io对象.truncate(字节长度) 返回值:截取的字节长度
OS模块:
- OS -- 操作系统的简称
- os模块就是对操作系统进行操作
- 使用该模块必须先导入模块:
import os
os模块中的函数:
序号 | 函数名称 | 描述 | 格式 |
1 | getcwd() | 获取当前的工作目录 | 格式:os.getcwd() 返回值:路径字符串 |
2 | chdir() | 修改当前工作目录 | 格式:os.chdir() 返回值:None |
3 | listdir() | 获取指定文件夹中的 所有文件和文件夹组成的列表 |
格式:os.listdir(目录路径) 返回值:目录中内容名称的列表 |
4 | mkdir() | 创建一个目录/文件夹 | 格式:os.mkdir(目录路径) 返回值:None |
5 | makedirs() | 递归创建文件夹 | 格式:os.makedirs(路径) |
6 | rmdir() | 移除一个目录(必须是空目录) | 格式:os.rmdir(目录路径) 返回值:None |
7 | removedirs() | 递归删除文件夹 | 格式:os.removedirs(目录路径) 返回值:None 注意最底层目录必须为空 |
8 | rename() | 修改文件和文件夹的名称 | 格式:os.rename(源文件或文件夹,目标文件或文件夹) 返回值:None |
9 | stat() | 获取文件的相关 信息 | 格式:os.stat(文件路径) 返回值:包含文件信息的元组 |
10 | system() | 执行系统命令 | 格式:os.system() 返回值:整型 慎用!玩意来个rm -rf 你就爽了! |
11 | getenv() | 获取系统环境变量 | 格式:os.getenv(获取的环境变量名称) 返回值:字符串 |
12 | putenv() | 设置系统环境变量 | 格式:os.putenv('环境变量名称',值) 返回值:无 注意:无法正常的getenv检测到。 |
13 | exit() | 推出当前执行命令,直接关闭当前操作 | 格式:exit() 返回值:无 |
当前os模块的值:
序号 | 函数名称 | 描述 |
1 | curdir | os.curdir 获取当前路径 都是. |
2 | pardir | os.pardir 获取上层目录路径 都是.. |
3 | path | os.path os中的一个子模块,操作非常多 |
4 | name | os.name 当前系统的内核名称 win->nt linux/unix->posix |
5 | sep | os.sep 获取当前系统的路径分割符号 window -> \ linux/unix -> / |
6 | extsep | os.extsep 获取当前系统中文件名和后缀之间的分割符号,所有系统都是. |
7 | linesep | os.linesep 获取当前系统的换行符号 window -> \r\n linux/unix -> \n |
os.environ模块
- os.environ 可以直接获取所有环境变量的信息组成的字典,如果希望更改环境变量,并且可以查询得到,就需要对os.environ进行操作
- 该模块的所有方法均是字典的方法,可以通过字典的os.environ的结果进行操作。
- 注意:无论使用os.getenv,putenv 还是使用os.environ进行环境变量的操作,都是只对当前脚本,临时设置而已,无法直接更新或者操作系统的环境变量设置。
os.path模块
- os.path是os模块中的子模块,包含很多和路径相关的操作
- 函数部分:
序号 | 函数名称 | 描述 | 格式 |
1 | abspath() | 将一个相对路径转化为绝对路径 | 格式:os.path.abspath(相对路径) 返回值:绝对路径字符串 |
2 | basename() | 获取路径中的文件夹或者文件名称 (只要路径的最后一部分) |
格式:os.path.basename(路径) 返回值:路径的最后一部分(可能是文件名也可能是文件夹名) |
3 | dirname() | 获取路径中的路径部分(出去最后一部分) | 格式:os.path.dirname(路径) 返回值:路径中除了最后一部分的内容字符串 |
4 | join() | 将2个路径合成一个路径 | 格式:os.path.join(路径1,路径2) 返回值:合并之后的路径 |
5 | split() | 将一个路径切割成文件夹和文件名部分 | 格式:os.path.split(路径) 返回值:元组 |
6 | splitext() | 将一个文件名切成名字和后缀两个部分 | 格式:os.path.splitext(文件名称) 返回值:元组 (名称,后缀) |
7 | getsize() | 获取一个文件的大小 | 格式:os.path.getsize(路径) 返回值:整数 |
8 | isfile() | 检测一个路径是否是一个文件 | 格式:os.path.isfile(路径) 返回值:布尔值 |
9 | isdir() | 检测一个路径是否是一个文件夹 | 格式:os.path.isdir(路径) 返回值:布尔值 |
10 | getctime() | 获取文件的创建时间!get create time | 格式:os.path.getctime(文件路径) 返回值:时间戳浮点数 |
11 | getmtime() | 获取文件的修改时间!get modify time | 格式:os.path.getmtime(文件路径) 返回值:时间戳浮点数 |
12 | getatime() | 获取文件的访问时间!get active time | 格式:os.path.getatime(文件路径) 返回值:时间戳浮点数 |
13 | exists() | 检测指定的路径是否存在 | 格式:os.path.exists(路径) 返回值:布尔值 |
14 | isabs() | 检测一个路径是否是绝对路径 | 格式:os.path.isabs(路径) 返回值:布尔值 |
15 | islink() | 检测一个路径是否是链接 | 格式:os.path.islink(路径) 返回值:布尔值 |
16 | samefile() | 检测2个路径是否指向同一个文件 | 格式:os.path.samefile(路径1,路径2) 返回值:布尔值 |