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 模块

 

posted @ 2020-10-07 08:50  老谭爱blog  阅读(245)  评论(0)    收藏  举报