2019.3.8 - python - os模块和文件操作

一、文件读写操作 - 内置函数

1.打开文件 - open()

1.1 参数说明:
open(file,mode,buffering,encoding)
1)file: 打开的文件
2)mode:打开的模式
		‘rt’:(默认)只能打开纯文本文件
		‘wt’:只能写入纯文本文件(覆盖式写入)
		'rb':可以打开纯文本、音频、视频文件
		'wb':可以写入纯文本、音频、视频文件
		'a':可以在文件内容后面写入新的内容(不覆盖写入)
3)buffering:分配的缓存
4)encoding:编码类型(若打开的文件中有中文,那么要注明 encoding = ' utf-8')
1.2 使用说明

`open() ------> 返回值:stream(管道)

注意:1、如果输入的 path\filename 不存在,会报错:FileNotFoundError
2、file = open()之后,一定要 file.close()

2.读取文件 - read功能函数

stream.read() :读取所有内容 ------ > 返回全部内容
stream.readable() :判断是否可读 ------> 返回一个 bool 类型
stream.readline() :每次读取一行内容并且加一个空行 ------> 返回一行内容
stream.readines() :读取所有的行,保存到列表中[’’,’’.’’] ------> 返回一个list

注意:1、凡是设计返回值的,都要定义一个容器来装。
2、 当读取完之后,指针会停在末尾,不能再次读取。

3.写入文件 - write功能函数

注意:此时 open() 中 mode 要改类型。

stream.write(内容):每次都会覆盖原来的内容
stream.writelines(Iterable):没有换行的效果,自己加\n 比如:stream.writelines([“刘德华\n”,“周星驰\n”,“胡歌”])

4.自动释放内存资源写法格式

with open("gray1.jpg","rb") as stream:  
"""
 可以自动释放资源,即无需file.close()
""" 

5.获取文件名 - path.rfind()

path = r'D:\Study\python_文件\os.path\os.path.py'
file = path[path.rfind('\\') + 1:]
print(file)

说明:从右往左,截止至第一个’\‘,后面一个元素就是文件名

二、文件读写操作 - os 模块

1.开头注明:

import os

2.绝对路径和相对路径

绝对路径:"D:\Study\python_文件\gray1.jpg"  # 从硬盘出发寻找
相对路径:"../image/gray2.jpg"  
# 以当前文件为参考点出发。如果找的文件非同级,当前文件必须回到同级文件。
# 每'../'就是回一级。

python_文件-data | gray1.jpg (当前文件)(相对路径:’…/image/gray2.jpg’)
|
| image —gray2.jpg (目标文件)–|

3.判断是否为绝对路径 - os.path.isabs()

 r = os.path.isabs()-- 测试是否是绝对路径,返回布尔类型
 绝对路径:
r = os.path.isabs("D:\Study\python_文件\gray1.jpg")
print("r:", r) 
>>> True

4.获取文件的文件夹路径(截止到文件夹)

4.1 os.path.dirname(文件名)

比如:注:file 是当前文件

path = os.path.dirname(__file__)
print(path)
4.2 os.getcwd(文件名)
path = os.getcwd()  # 不填,就默认当前文件

5.文件夹判断 - os.path.isdir()

os.path.isdir(path) ---> 返回布尔类型
比如:
path = r'D:\Study\python_文件\copy3'
os.path.isdir(path)   --- 判断 copy3 是是否是文件夹

6.找到文件的找到绝对路径 - os.path.abspath()

6.1 通过相对路径 — 得到绝对路径
path = os.path.abspath('readme.txt') ---> 返回'readme.txt'的绝对路径
6.2 找到当前文件的绝对路径
path = os.path.abspath(__file__) ---> 返回'当前文件'的绝对路径

7.如何获取文件名

7.1 os.path.split()
path = r'D:\Study\python_文件\os.path\os.path.py'
result = os.path.split(path)  # 返回一个元组
print(result[1])

注意:返回的元组(文件夹路径,文件名)

7.2 path.rfind() — 见上

8.输出文件大小 - os.path.getsize()

result = os.path.getsize(path)
print(result)

9.拼接函数 - os.path.join(path, *paths)

'file','readme1.txt' -- 两层 -- D:\Study\python_文件\os.path\file\readme1.txt
result = os.path.join(os.getcwd(),'file','readme1.txt')

注意:od.getcwd() 是基础路径,file ,readme1.txt —> file\readme1.txt

三、综合操作

1.文件复制

with open("gray1.jpg","rb") as stream:
    container = stream.read()  # 读取文件内容
    with open("gray2.jpg",'wb') as wstream:
        wstream.write(container)
print("文件复制成功。")

2.文件夹复制

2.1 文件夹 copy1 中只有纯文件,把copy1 复制到 copy2 中
 def copy(src, target):
     if os.path.isdir(src) and os.path.isdir(target):
       file_list = os.listdir(src)
        # 遍历文件夹中的所有文件,重复读和写操作
         for file in file_list:
             path = os.path.join(src, file)
             with open(path, 'rb') as read_stream:
                 container = read_stream.read()

                 path1 = os.path.join(target, file)
                 with open(path1,'wb') as write_stream:
                     write_stream.write(container)
         else:
             print('copy finished')
2.2 文件夹 copy3 中含有 文件夹 copy 3.1,把copy3 复制到 copy2 中

src_path = r'D:\Study\python_文件\copy3'
target_path = r'D:\Study\python_文件\copy2'


def copy(src,target):
    # 获取目录里的内容列表
    filelist = os.listdir(src)
    print(filelist)
    # 遍历列表
    for file in filelist:
        # 拼接路径
        path = os.path.join(src,file)
        # 判断是文件夹还是文件
        if os.path.isdir(path):
            # 是文件夹就更新路径
            scr1 = os.path.join(src,file)
            target1 = os.path.join(target,file)
            # 在目标文件中创建这个文件夹
            os.mkdir( target1)
            # 递归调用
            copy(scr1,target1)
        else:
            # 不是文件夹就直接复制
            with open(path, 'rb') as read_stream:
                container = read_stream.read()
                path1 = os.path.join(target, file)
                with open(path1,'wb') as write_stream:
                    write_stream.write(container)
    else:
        print('copy finished')

另:转载注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值