IO操作
简介
IO操作,即输入(Input)输出(Output)操作,是指数据在计算机内存和外部设备或者网络间的传输过程。大部分的编程语言都支持IO操作,例如C#、C、Java等,python同样支持IO操作
文件操作
open函数
open(path,mode)
以mode模式打开path路径下的文件,例:XXX/XXX.txt
mode模式有很多种:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(Python 3 不支持)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
f = open("test1.txt","w+")
f.close()
file对象
调用open()函数后会返回一个对象,跟C#中文件打开后会返回一个FileInfo对象一样,可以通过对file对象的操作来控制文件的操作。
常用的file接口有很多:
序号 | 方法及描述 |
---|---|
1 | file.close()关闭文件。关闭后文件不能再进行读写操作。 |
2 | file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
3 | file.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
4 | file.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。 |
5 | file.next()Python 3 中的 File 对象不支持 next() 方法。返回文件下一行。 |
6 | file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。 |
7 | file.readline([size])读取整行,包括 "\n" 字符。 |
8 | file.readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
9 | file.seek(offset[, whence])移动文件读取指针到指定位置 |
10 | file.tell()返回文件当前位置。 |
11 | file.truncate([size])从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。 |
12 | file.write(str)将字符串写入文件,返回的是写入的字符长度。 |
13 | file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
f = open("test1.txt","w+")
f.write("哈哈哈,这是一个测试内容\n这是第二行内容")
f.flush()
f.seek(0,0)
lines = f.readlines()
for v in lines:
print(v)
print(f.tell())
f.close()
os模块
os模块是python中与操作系统交互的重要模块,通过os模块可以执行文件操作、目录操作、环境变量和进程管理等任务,且os模块是跨平台模块,在MAC、Linux、Windows上都可以使用。
序号 | 方法 | 描述 |
---|---|---|
1 | os.access(path, mode) | 检验权限模式 |
2 | os.chdir(path) | 改变当前工作目录 |
3 | os.chflags(path, flags) | 设置路径的标记为数字标记。 |
4 | os.chmod(path, mode) | 更改权限 |
5 | os.chown(path, uid, gid) | 更改文件所有者 |
6 | os.chroot(path) | 改变当前进程的根目录 |
7 | os.close(fd) | 关闭文件描述符 fd |
8 | os.closerange(fd_low, fd_high) | 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略 |
9 | os.fchdir(fd) | 通过文件描述符改变当前工作目录 |
10 | os.fchmod(fd, mode) | 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。 |
11 | os.fchown(fd, uid, gid) | 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。 |
12 | os.fdatasync(fd) | 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。 |
13 | os.fdopen(fd[, mode[, bufsize]]) | 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象 |
14 | os.getcwd() | 返回当前工作目录 |
15 | os.getcwdb() | 返回一个当前工作目录的Unicode对象 |
16 | os.listdir(path) | 返回path指定的文件夹包含的文件或文件夹的名字的列表。 |
17 | os.link(src, dst) | 创建硬链接,名为参数 dst,指向参数 src |
18 | os.makedirs(path[, mode]) | 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。 |
19 | os.open(file, flags[, mode]) | 打开一个文件,并且设置需要的打开选项,mode参数是可选的 |
20 | os.remove(path) | 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。 |
21 | os.removedirs(path) | 递归删除目录。 |
22 | os.rename(src, dst) | 重命名文件或目录,从 src 到 dst |
23 | os.renames(old, new) | 递归地对目录进行更名,也可以对文件进行更名。 |
24 | os.rmdir(path) | 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。 |
25 | os.unlink(path) | 删除文件路径 |
26 | os.utime(path, times) | 返回指定的path文件的访问和修改的时间。 |
27 | os.write(fd, str) | 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度 |
28 | os.path | 模块获取文件的属性信息。 |
29 | os.pardir() | 获取当前目录的父目录,以字符串形式显示目录名。 |
30 | os.replace() | 重命名文件或目录。 |
31 | os.startfile() | 用于在 Windows 上打开一个文件或文件夹。 |
import os
print(os.getcwd())
os.chdir("Project")
print(os.getcwd())
os.mkdir("TestDir")
print(os.listdir(os.getcwd()))
if(os.path.exists("TestDir") and os.access("TestDir",os.R_OK)):
os.rmdir("TestDir")
print(os.listdir(os.getcwd()))