Python系统函数文件操作
一、文件
-
用open创建文件
import os fout = open('ops.txt', 'wt') fout.close()
-
用exists()检查文件或目录是否存在
传入绝对路径或者相对路径,存在返回True不存在返回False
import os os.path.exists('opt.txt') # return True os.path.exists('.') # True
-
用isfile()检查是否是文件
import os os.path.isfile(name) # 是否是文件 os.path.isdir(name) # 是否是目录 os.path.isabs() # 是否是绝对路径
-
用copy()复制文件
import shutil shutil.copy('t1.txt', 't2.txt') shutil.move('t1', 't2')
-
用rename()重命名文件
import os os.rename('t1.txt', 't2.txt')
-
用link()或者symlink()创建链接
link()创建硬链接,symlink()创建软链接
import os os.link('t1.txt', 't2.txt') os.path.islink('t2.txt') # False os.symlink('t1.txt', 't2.txt') os.path.islink('t2.txt') # True
-
使用chmod()修改权限
import os os.chmod('t1.txt', 0o400) import stat os.chmod('t1.txt', stat.S_IRUSR)
-
使用chown()修改所有者
import os uid = 5 gid = 22 os.chown('oss', uid, gid)
-
用abspath()获取绝对路径名
import os # pwd /usr/gaber os.path.abspath('t1.txt') # /usr/gaber/t1.txt
-
使用realpath()获取符号链接的路径名
import os # t1.txt ---> t2.txt os.path.realpath('t2.txt') # t1.txt的路径
-
用remove()删除文件
import os os.remove('t1.txt')
二、目录
-
使用mkdir()创建目录
import os os.mkdir('dir1')
-
使用rmdir()删除目录
import os os.rmdir('dir1')
-
使用listdir()列出目录内容
import os os.listdir('dir1') # [] 目录dir1下的子目录和文件列表
dir1 ├── childdir │ └── t2.txt └── t1.txt
import os os.listdir('dir1') # ['childdir', 't1.txt']
-
使用chdir()修改当前目录
import os os.chdir('dir2')
-
使用glob()列出匹配文件
*会匹配任意名称
?会匹配一个字符
[abc]会匹配字符a、b、c
[!abc]会匹配除了a、b、之外的所有字符
import glob glob.glob('m*') # m开头的文件和目录
三、文件的输入输出
-
使用open()打开文件
f = open(filename, mode) # f为文件对象 filename 文件名 # mode: r(读) w(写,不存在则新建) x(不存在的情况下新建) a(如果文件存在则追加) # t(文本文件) b(二进制文件) f = open('t2.txt', 'rb') # 读文本文件的方式打开文件t2.txt
-
使用write()写文本文件
s = 'hello world!' fout = open('t1.txt', 'wt') fout.write(s) fout.close()
如果字符串源非常大,可以将数据分块,直到所有字符都被写入
s = '123456..................' fout = open('t1.txt', 'wt') offset = 0 chunk = 100 while True: if offset > size: break fout.write(s[offset:offset+chunk]) offset += chunk fout.close()
-
使用read()、readline()、或者readlines()读取文本文件
read()一次读入所有文件、readline()一次读入一行文件、readlines()一次读入所有行文件到列表。
fin = open('t1.txt', 'rt') s = fin.read() fin.close()
s = '' fin = open('t1.txt', 'rt') # 每次读入100个字符 chunk = 100 while True: f = fin.read(chunk) if not f: break s += f fin.close()
使用readline()每次读入一行
s = '' fin = open('t1.txt', 'rt') while True: line = fin.readline() if not line: break s += line fin.close()
使用迭代器读取文本文件
s = '' fin = open('t1.txt', 'rt') for line in fin: s += line fin.close()
使用readlines()一次读入所有的行,返回一个列表,内容为文件的单行文本。
s = '' fin = open('t1.txt', 'rt') lines = fin.readlines() fin.close() for line in lines: print(line)
-
使用with自动关闭文件
with open('t1.txt', 'wt') ad fout: fout.write(s)
-
使用write()写二进制数据
bdata = bytes(range(0, 256)) fout = open('t1.txt', 'wb') fout.write(bdata) fout.close()
-
使用read读二进制文件
fin = open('bfile', 'rb') bdata = fin.read() fin.close()