文件操作和OS模块
声明:参考菜鸟教程作笔记 http://www.runoob.com/python3/python3-tutorial.html
文件的打开与关闭
- open()打开文件;close()关闭文件。打开文件必须要关闭文件,所以open()和close()为成对使用。
- open()参数意思。
访问 模式 | 说 明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
读取文件
f = open("F:/01.txt", "r") # 读取一个文件 for i in f.readlines(): # 遍历文件的每一行 print(i, end="") # 输出每行的内容。因为每行结尾是\n换行符。所以不需要输出换行。 f.close() # 关闭文件
写入文件
f = open("F:/01.txt", "w") # 打开或创建一个文件 f.write('你好') # 写入内容 f.close() # 关闭文件 f = open("F:/01.txt", "r") # 读取一个文件 for i in f.readlines(): # 遍历文件的每一行 print(i, end="") # 输出每行的内容。因为每行结尾是\n换行符。所以不需要输出换行。 f.close() # 关闭文件
打开文件自动关闭方法
with open('F:/01.txt','r', encoding='utf-8') as f: for i in f.readlines(): print(i, end="")
读写文件设置制定编码
- 加入encoding参数
open("F:/01.txt", "w", encoding='utf-8')
Python3 File(文件) 方法
# 01.txt文件内容 这是第一行 这是第二行 这是第三行 这是第四行 这是第五行
1、close()
- close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
- 当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
fileObject.close()
实例
f= open("F:/01.txt", "r", encoding='utf-8') print("文件名是:{0}".format(f.name)) f.close()
2、flush()
- flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
- 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
fileObject.flush()
实例
f= open("F:/01.txt", "r", encoding='utf-8') print("文件名是:{0}".format(f.name)) f.flush() f.close()
3、fileno()
- fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
fileObject.fileno()
实例
f= open("F:/01.txt", "r", encoding='utf-8') print("文件名是:{0}".format(f.name)) fid = f.fileno() print ("文件描述符为:{0}".format(fid)) f.close()
4、isatty()
- isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。
fileObject.isatty()
实例
f= open("F:/01.txt", "r", encoding='utf-8') ret = f.isatty() print ("返回值:{0}".format(ret)) f.close()
5、next()
- Python 3 中的 File 对象不支持 next() 方法。 Python 3 的内置函数 next() 通过迭代器调用 __next__() 方法返回下一项。 在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,如果到达结尾(EOF),则触发 StopIteration
next(iterator[,default])
实例
f= open("F:/01.txt", "r", encoding='gbk') for index in range(5): line = next(f) print ("第{0}行 - {1}".format(index, line), end="") f.close()
6、read()
- read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
fileObject.read()
实例
f= open("F:/01.txt", "r", encoding='gbk') line = f.read(10) print ("读取字符串:{0}".format(line)) #换行符占一个位 f.close()
7、readline()
- readline() 方法用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。
fileObject.readline()
实例
f= open("F:/01.txt", "r") line = f.readline() print ("读取第一行:{0}".format(line)) line = f.readline(4) print ("读取第二次:{0}".format(line)) f.close()
8、readlines()
- readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。
- 如果碰到结束符 EOF 则返回空字符串。
fileObject.readlines( )
实例
f= open("F:/01.txt", "r") for line in f.readlines(): #依次读取每行 line = line.strip() #去掉每行头尾空白 print ("读取的数据为:{0}".format(line)) f.close()
9、seek()
- seek() 方法用于移动文件读取指针到指定位置。
- offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
- whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
-
fileObject.seek(offset[, whence])
实例
f= open("F:/01.txt", "r") line = f.read() print ("读取的数据为:{0}".format(line)) f.seek(6, 0) red = f.read() print ("再次读取的数据为:{0}".format(line)) f.close()
10、tell()
- tell() 方法返回文件的当前位置,即文件指针当前位置。
fileObject.tell(offset[, whence])
实例
f= open("F:/01.txt", "r") line = f.readline() print ("读取的数据为:{0}".format(line)) pos = f.tell() print ("当前位置:{0}".format(pos)) f.close()
11、truncate()
- truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
fileObject.truncate( [ size ])
实例
f= open("F:/01.txt", "r+") f.truncate(8) line = f.read() print ("再次读取行:{0}".format(line)) f.close()
12、write()
- write() 方法用于向文件中写入指定字符串。
- 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
fileObject.write( [ str ])
实例
f= open("F:/01.txt", "r+") f.seek(0, 2) # 内容写末尾 f.write("\n这是新的一行") f.seek(0, 0) # 从头读取文件 line = f.readlines() print ("读取:{0}".format(line)) f.close()
13、writelines()
- writelines() 方法用于向文件中写入一序列的字符串。
- 这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
- 换行需要制定换行符 \n。
fileObject.writelines( [ str ])
实例
f= open("F:/01.txt", "w") seq = ['第一个\n', '第二个'] f.writelines(seq) f.close()
Python3 OS 文件/目录方法
1、os.access()
- os.access() 方法使用当前的uid/gid尝试访问路径。大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试。
- path -- 要用来检测是否有访问权限的路径。
- mode -- mode为F_OK,测试存在的路径,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
- os.F_OK: 作为access()的mode参数,测试path是否存在。
- os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
- os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
- os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。
-
os.access(path, mode);
实例
import os ret = os.access("f:/01.txt", os.F_OK) print("F_OK值为:{0}".format(ret)) ret = os.access("f:/01.txt", os.R_OK) print("R_OK值为:{0}".format(ret)) ret = os.access("f:/01.txt", os.W_OK) print("W_OK值为:{0}".format(ret)) ret = os.access("f:/01.txt", os.X_OK) print("X_OK值为:{0}".format(ret))
2、os.chdir()
- os.chdir() 方法用于改变当前工作目录到指定的路径。
os.chdir(path)
实例
path = "e:/" rl = os.getcwd() print("当前工作目录:{0}".format(rl)) os.chdir(path) rl = os.getcwd() print("操作后工作目录:{0}".format(rl))
3、os.chflags()
- os.chflags() 方法用于设置路径的标记为数字标记。多个标记可以使用 OR 来组合起来。
- 只支持在 Unix 下使用。
- path -- 文件名路径或目录路径。
- flags -- 可以是以下值:
- stat.UF_NODUMP: 非转储文件
- stat.UF_IMMUTABLE: 文件是只读的
- stat.UF_APPEND: 文件只能追加内容
- stat.UF_NOUNLINK: 文件不可删除
- stat.UF_OPAQUE: 目录不透明,需要通过联合堆栈查看
- stat.SF_ARCHIVED: 可存档文件(超级用户可设)
- stat.SF_IMMUTABLE: 文件是只读的(超级用户可设)
- stat.SF_APPEND: 文件只能追加内容(超级用户可设)
- stat.SF_NOUNLINK: 文件不可删除(超级用户可设)
- stat.SF_SNAPSHOT: 快照文件(超级用户可设)
os.chflags(path, flags)
实例
import os,stat path = "/01.txt" # 为文件设置标记,使得它不能被重命名和删除 fl = stat.SF_NOUNLINK rl = os.chflags( path, fl ) print("返回值:{0}".format(rl))
4、os.chmod()
- os.chmod() 方法用于更改文件或目录的权限。
- Unix 系统可用。
- path -- 文件名路径或目录路径。
- flags -- 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
- stat.S_IXOTH: 其他用户有执行权0o001
- stat.S_IWOTH: 其他用户有写权限0o002
- stat.S_IROTH: 其他用户有读权限0o004
- stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
- stat.S_IXGRP: 组用户有执行权限0o010
- stat.S_IWGRP: 组用户有写权限0o020
- stat.S_IRGRP: 组用户有读权限0o040
- stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
- stat.S_IXUSR: 拥有者具有执行权限0o100
- stat.S_IWUSR: 拥有者具有写权限0o200
- stat.S_IRUSR: 拥有者具有读权限0o400
- stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
- stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
- stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
- stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
- stat.S_IREAD: windows下设为只读
- stat.S_IWRITE: windows下取消只读
os.chmod(path, mode)
实例
import os, sys, stat # 假定 /01.txt 文件存在,设置文件可以通过用户组执行 os.chmod("/01.txt", stat.S_IXGRP) # 设置文件可以被其他用户写入 os.chmod("/01.txt", stat.S_IWOTH) print ("修改成功!!")
5、os.chown()
- os.chown() 方法用于更改文件所有者,如果不修改可以设置为 -1, 你需要超级用户权限来执行权限修改操作。
- 只支持在 Unix 下使用。
-
path -- 设置权限的文件路径
-
-
gid -- 所属用户组 ID
os.chown(path, uid, gid)
实例
import os, sys # 设置所有者 ID 为 1000 os.chown("/01.txt", 1000, -1) print ("修改权限成功!!")
6、os.chroot()
- os.chroot() 方法用于更改当前进程的根目录为指定的目录,使用该函数需要管理员权限。
- 在 unix 中有效。
os.chroot(path)
实例
import os, sys # 设置根目录为 /tmp os.chroot("/tmp") print ("修改根目录成功!!")
7、os.close()
- os.close() 方法用于关闭指定的文件描述符 fd。
- fd -- 文件描述符。
os.close(fd)
实例
import os, sys # 打开文件 fd = os.open( "01.txt", os.O_RDWR|os.O_CREAT ) # 写入字符串 os.write(fd, "This is test") # 关闭文件 os.close( fd ) print ("关闭文件成功!!")
8、os.closerange()
- os.closerange() 方法用于关闭所有文件描述符 fd,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略。
- fd_low -- 最小文件描述符
- fd_high -- 最大文件描述符
os.closerange(fd_low, fd_high) # 该方法类似于: for fd in xrange(fd_low, fd_high): try: os.close(fd) except OSError: pass
实例
import os, sys # 打开文件 fd = os.open( "01.txt", os.O_RDWR|os.O_CREAT ) # 写入字符串 os.write(fd, "This is test") # 关闭文件 os.closerange( fd, fd) print ("关闭文件成功!!")
9、os.dup()
- os.dup() 方法用于复制文件描述符 fd。
- fd -- 文件描述符
os.dup(fd)
实例
import os, sys # 打开文件 fd = os.open( "01.txt", os.O_RDWR|os.O_CREAT ) # 复制文件描述符 d_fd = os.dup( fd ) # 使用复制的文件描述符写入文件 os.write(d_fd, "This is test".encode()) # 关闭文件 os.closerange( fd, d_fd) print ("关闭所有文件成功!!")
10、os.dup2()
- os.dup2() 方法用于将一个文件描述符 fd 复制到另一个 fd2。
- Unix, Windows 上可用。
- fd -- 要被复制的文件描述符
- fd2 -- 复制的文件描述符
os.dup2(fd, fd2)
实例
import os # 打开一个文件 f=open('txt','a') # 将这个文件描述符代表的文件,传递给 1 描述符指向的文件(也就是 stdout) os.dup2(f.fileno(), 1) # 关闭文件 f.close() # print 输出到标准输出流,就是文件描述符1 print('long') print('xxxx')
11、os.fchdir()
- os.fchdir() 方法通过文件描述符改变当前工作目录。
- Unix, Windows 上可用。
- fd -- 文件描述符
os.fchdir(fd)
实例
import os, sys # 首先到目录 "/etc/sysconfig/network-scripts" os.chdir("/etc/sysconfig/network-scripts" ) # 输出当前目录 print ("当前工作目录为 : %s" % os.getcwd()) # 打开新目录 "/tmp" fd = os.open( "/tmp", os.O_RDONLY ) # 使用 os.fchdir() 方法修改到新目录 os.fchdir(fd) # 输出当前目录 print ("当前工作目录为 : %s" % os.getcwd()) # 关闭打开的目录 os.close( fd )
12、
13、
14、
15、
16、
17、
18、
19、
20、
21、
22、
23、
24、
25、
26、
27、
28、
29、
30、
31、
32、
33、
34、
35、
36、
37、
38、
39、
40、
41、
42、
43、
44、
45、
46、
47、
48、
49、
50、
51、
52、
53、
54、
55、