文件操作分为文本和二进制文件操作
创建文件对象open(),格式:open(文件名,打开方式)
如果我们没有增加模式b,则默认创建的是文本文件,处理的单元是字符,如果是二进制b,则创建的是二进制文件,处理单元是字节
文件的写入
基本文件写入操作三个步骤:
1.创建文件对象
2.写入数据
3.关闭文件对象
为什么要关闭文件?因为不关闭会浪费资源
wirte(a)把字符a写入文件中
writelines(a)把字符串列表写入文件中
close()关闭流
#使用异常机制管理文件对象的关闭操作 try: f = open(r'a.txt','w') str = ['zf1\n','zf2\n','zf3\n'] f.writelines(str) except BaseException as e: print(e) finally: f.close()
with上下文管理器
with open(r'b.txt', 'a', encoding='utf-8') as f: str1 = ['钟离\n', '枫原万叶\n', '神里绫华\n'] f.writelines(str1)
文本文件的读取
with open(r'd.txt', 'r', encoding='utf-8') as f: lines = f.readlines() lines = [temp.rstrip() + '#' + str(index + 1)+'\n' for index, temp in enumerate(lines)] with open(r'd.txt', 'w', encoding='utf-8') as f: f.writelines(lines)
二进制文件的读取和写入_图片的拷贝
with open(r'd:\a.jpg', 'rb') as f: with open(r'a_copy.jpg', 'wb') as w: for i in f.readlines(): w.write(i)
文件对象的常用方法和属性
属性
打开模式
pickle函数实现序列化和反序列化
import pickle #序列化 with open(r'e.dat', 'wb') as f: a1 = [1] a2 = [2] a3 = [3] pickle.dump(a1, f) pickle.dump(a2, f) pickle.dump(a3, f) #反序列化 with open('e.dat', 'rb') as f: a1 = pickle.load(f) a2 = pickle.load(f) a3 = pickle.load(f) print(a1, a2, a3)
CSV文件读取和写入
import csv # 文件写入 rows = [['凌华', 18, '稻妻'], ['琴', 28, '蒙德'], ['班尼特', 18, '璃月']] with open(r'f.csv', 'w') as f: w = csv.writer(f) w.writerow(['姓名', '年龄', '地址']) w.writerows(rows) # 文件读取 with open(r'f.csv', 'r') as f: b = csv.reader(f) for i in list(b): print(i)
OS模块
import os os.system('notepad.exe') # 调用win系统的记事本 os.system('ping www.baidu.com') # 调用ping命令 os.system('cmd') # 调用cmd命令 # 直接调可执行的文件 os.startfile(r'D:\Thunder\Program\ThunderStart.exe')
OS文件和目录操作
# coding=utf-8 import os print(os.name) print(os.sep) # win\ Lnuix/ print(os.linesep) print(os.stat('OS1.py')) # 打印当前目录信息 print(os.getcwd()) # 打印当前目录 # os.chdir('d:') # 更改当前路径 os.mkdir('书籍') # 在当前文件夹下创建目录 os.rmdir('书籍') # 删除目录 # os.makedirs('电影/香港/s') # os.removedirs('电影/香港/s') #只能删除空目录 os.makedirs('../音乐/香港') # ../上级目录 # os.rename('电影', 'movie') print(os.listdir('movie'))
os.path
import os os.path.isabs() # 是否绝对路径 os.path.isfile() # 是否文件 os.path.exists() # 是否存在 os.path.isdir() # 是否目录 print(os.path.getsize()) # 返回文件大小 print(os.path.getctime()) # 文件创建时间 print(os.path.getatime()) # 文件访问时间 print(os.path.getmtime()) # 文件最后修改时间 print(os.path.abspath()) # 返回绝对路径 print(os.path.split()) # 返回目录文件 print(os.path.splitext()) # 返回目录扩展名 print(os.path.join()) # 返回多级目录
walk()遍历所有文件和目录
返回一个 3 个元素的元组,(dirpath, dirnames, filenames), dirpath:要列出指定目录的路径 dirnames:目录下的所有文件夹 filenames:目录下的所有文件
# coding=utf-8 import os path = os.getcwd() list_files = os.walk(path) for dir_path, dirnames, filenames in list_files: for s in filenames: print(os.path.join(dir_path, s)) for m in dirnames: print(os.path.join(dir_path, m))
shutil模块文件目录拷贝
# coding=utf-8 import shutil shutil.copyfile('1.txt', '1_1.txt') shutil.copytree('香港', '音乐', ignore=shutil.ignore_patterns('*.html'))
压缩解压缩
# coding=utf-8 import shutil import zipfile shutil.make_archive('香港/gg', 'zip', '音乐') z1 = zipfile.ZipFile('a.zip', 'w') # 将多个文件压缩 z1.write('1.txt') z1.write('1_1.txt') z1.close() # 解压缩 z2 = zipfile.ZipFile('a.zip','r') z2.extractall('香港') z2.close()