IS 输入输出、 OS操作系统接口 shutil模块高级文件操作
一、IS
open,encoding 默认值是cp936
文件 file:功能,对单个文件进行读写操作
# encoding = utf-8 with open("a.txt", "r+", encoding='utf-8') as f: # 对于用字节模式(如:rb,wb,ab等)打开的文件,不可以指定encoding参数。 print(f.seek(0, 2)) # 移到光标到文件尾 返回光标位置 # def seek(self, offset: int, whence: int = 0) -> int: # offset:移动多少字节,对于文本模式打开的文件,只能从文件首向后移(即whence参数为0,也是默认值),或者直接跳到文件尾,(offset是0和whence是2) # whence:从什么位置开始移动,0:文件首,1:当前位置,2:文件尾 对于用字节模式(如:rb,wb,ab等)打开的文件,可以从文件尾向前移动光标 # seek(x, 0) : 从起始位置即文件首行首字符开始移动x个字节,注意是字节而不是字符,对于中文字符(一个汉字占3个字节),随便移动可能会造成乱码 # seek(x, 1) : 表示从当前位置往后移动x个字节 仅适用于字节模式(如:rb,wb,ab等)打开的文件 # seek(-x, 2): 表示从文件的结尾往前移动x个字符 仅适用于字节模式(如:rb,wb,ab等)打开的文件 # 在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置(即,开头或结尾)进行定位。,开头的话可以向后移,结尾的话不能向前移,只能是跳到结尾,即:seek(0,2) num = f.write('你好,我是一个好人啊\n你呢?') # 返回写入的字符数 print(num) # 9 print(f.tell()) # 27 光标所处的位置(字节)一个汉字占3个字节 f.seek(0) print(f.readline()) # f.close() # 释放资源,用with的时候它会帮你自动关闭 print(f.closed) # True
1、读方法:
1)read() 读取所有内容,可以传递一个参数读取指定字节数,当文件大小为当前机器内存两倍时,就会产生问题。反之,会尽可能按比较大的 size 读取和返回数据。如果到了文
件末尾, f.read() 会返回一个空字符串( '' ):
2)readline() 读取一行 参数是字符数(不是字节数)表次最多读入多少字符,可以省略,如果 f.readline() 返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为 '\n'
3)readlines() 读取N行到list 参数也是字符数,同上,可以省略,也可以把文件直接包装成一个 list 如5)
4)你可以循环遍历文件对象来读取文件中的每一行。这是一种内存高效、快速,并且代码简介的方式: for in 这种方式每次能读取一行
for line in f:
print(line, end='')
5)把文件直接包装成一个list,作用同3)
f = open('a.txt', encoding='utf-8')
l = list(f)
print(l) # ['你你好,我是一个好人啊\n', '你呢?你好,我是一个好人啊\n', '你呢?']
2、写方法
1)f.write(string) 方法将 string 的内容写入文件,并返回写入字符的长度:
二、os 功能:对文件和文件进行操作,不对文件内容进行读写
import os print(os.listdir('.')) # 获得指定目录下的文件和文件夹,默认为当前目录。该方法不能遍历,walk可以遍历 # 测试文件或文件夹 # os.F_OK:文件是否存在 os.R_OK:文件是否可读 os.W_OK:文件是否可写 os.X_OK:文件是否可执行 print(os.access("com", os.F_OK)) # 切换当前目录到指定目录 # os.chdir('F:') # print(os.listdir()) # 显示F:下的所有文件和文件夹 print(os.getcwd()) # D:\myPython 当前目录的绝对路径 os.path.abspath(".") # 是指定目录的绝对路径
# os.rename('b.txt', 'a.txt') 修改文件或文件夹的名字
os.unlink(r"F:\\bbb\ccc.txt") # 删除单个文件,也可以用remove os.remove('a.txt') # 删除文件,不能删除文件夹,也可以用unlink # os.mkdir('a') # os.makedirs("F:\\aaa\\bbb\ccc") # 创建多个文件夹 if os.path.exists('aaa1'): os.rmdir('aaa1') # 删除空文件夹,如果文件夹不为空则报错 gener = os.walk(r'F:\abt') # 返回一个生成器:generator,是一个函数,由yield返回值,跟迭代器iterator使用方法一样。
for a, b, c in os.walk('E:\\myPy'):
# print(a,b,c)
pass
gn = os.walk('E:\\myPy')
print(next(gn)) # ('E:\\myPy', ['.idea', 'venv'], ['main.py'])
print(os.curdir) # 获得当前目录,相当于'.' print(os.pardir) # 获得父目录,相当于'..'
二、os.path
import os import datetime print(os.path.abspath(".")) # 指定目录的绝对路径,os.getcwd()是当前目录的绝对路径。d:\myPython abspath是绝对路径,‘.’是当前路径,相当于path.curdir print(os.path.abspath("..")) # d:\ ".." 相当于pardir print(os.path.basename(r"d:\myPython\abc.txt")) # abc.txt print(os.path.basename(r"d:\myPython\abc")) # abc print(os.path.dirname(r"d:\myPython\abc.txt")) # d:\myPython print(os.path.dirname(r"d:\myPython\abc")) # d:\myPython print(os.path.split(r"d:\myPython\abc.txt")) # ('d:\\myPython', 'abc.txt') 可以同时获得basename和dirname os.path.join(os.getcwd(), 'txt.zip') # 拼接成一个完整路径 print(os.path.exists("a.txt")) # True 可以判断文件或文件夹是否存在 print(os.path.exists("pic")) # True 可以判断文件或文件夹是否存在 os.path.exists('G:\\') # 可以用来检查是否插入U盘 print(os.path.isdir("pic")) # True 是否是目录 print(os.path.isfile("a.txt")) # True 是否是文件 print(os.path.getsize("a.txt")) # 136 以字节为单位 t = os.path.getatime("a.txt") # 返 回最后一次的访问时间 t = os.path.getmtime("a.txt") # 返 回最后一次的修改时间 t = os.path.getctime("a.txt") # 返 回创建的时间 # 返 回值是一个 UNIX 时间戳 ( 1970 年 l 月 1 日 00:00:00 以来 至 现在的总秒数 dt = datetime.datetime.fromtimestamp(t) print(dt) # 2020-09-21 04:44:52.699126
另:
os.system('系统命令') # 这里可以输入cmd里的所有windows命令
shutil模块
import shutil, os # shutil.copy("F:\ccc.txt", "F:\\aaa\\") # 复制文件,可以省略文件名或重命名文件名 # shutil.copytree("F:\\aaa", "F:\\bbb") # 复制文件夹及里面的所有内容 # shutil.move(r"F:\\aaaa.txt", r"F:\\bbb\\abc.txt") # 移动(或改名,如果目标文件或文件夹不存在创建并改名,自己测试,不用记)文件或文件夹 # shutil.rmtree('F:\\bbb') # 删除文件夹及里面的所有内容,小心,不进回收站的,要使用回收站可以安装send2trash 模块

浙公网安备 33010602011771号