python下的文件管理

1.文件基本操作

文件读取三部曲: 打开 -----操作------关闭

r:
    - 只能读, 不能写;
    - 读取的文件不存在, 会报错;
r+:
    - 可以执行读写操作;
    - 文件不存在, 报错;
    - 默认情况下, 从文件指针所在位置开始写入;

w:
    - write only
    - 文件不存在, 不报错
    - 会清空文件内容
w+:
    - rw
    - 文件不存在, 不报错
    - 会清空文件内容
a:
    - write only
    - 文件不存在, 不报错
    - 不会清空文件内容
a+:
    - rw
    - 文件不存在, 不报错
    - 不会清空文件内容           

  

 

  

这里的报错是因为没有文件 ‘hello2’所以无法读取

 

 

 

这里的报错是因为,只给了读的权限,所以不能进行写的操作

 

 

   

读取文件成功

 

 

   

当文件不存在时,会自动生成一个新文件

 

 

   

这里显示的是添加字符的数量    

 

 

     先读取后显示,最后关闭文件

 

2.非纯文本文件的读取  

# 如果读取图片, 音乐或者视频(非文本文件), 需要通过二进制的方式进行读取与写入;b
"""
- 读取二进制文件
rb:rb+:wb:wb+:ab:ab+:
- 读取文本文件
rt:rt+:wt:wt+:at:at+  等价于  r:r+:w:w+:a:a+
"""
# 先读取二进制文件内容, 保存在变量content里面
f1 = open("frame1.png", mode='rb')
content = f1.read()
f1.close()
# print(content)

f2 = open('hello.png', mode='wb')
f2.write(content)
f2.close()
 

3.文件常用属性   

  

 

  

buffer是一个缓冲区对象    

closed  检测的是文件是否关闭  

fileno    显示的是文件号

name    文件对象

最后一个是文件信息

 

4.文件常用方法

          

    

  

readline           显示的是一行的内容  

read(3)       显示的是文件前三个字符      

 

    

   

 

 

 

因为文件读取后,指针会停留在原地

这里的  tell  显示指针位置  ;     seek(0,0)是让指针归零  ;       seek(0,2) 是让指针放在文件末尾

添加时会在指针位置处开始添加    如上图     

 

5.文件读取之with语句   

在python3中

                   

 

这是将1文件的内容转录到2文件中,打印的是2文件的内容

在python2中可以分两次打开并转录

 

6.yield实现大文件读取  

 

  

 

     

 

7.os之环境变量函数

 

  

   

结果如图  

 

8.文件读写练习

创建文件  data.txt   文件共10000行,每行存放1~100之间的有一个整数   

 

   

 

      

 

9.遍历指定目录下的所有内容

 

 

      

 

10.os之文件操作函数

 

# 1. 判断是否为绝对路径---'/tmp/hello', 'hello.png', 'qq/hello.mp3'
import os
import random

from os.path import exists, splitext, join

# print(os.path.isabs('/tmp/hello'))
# print(os.path.isabs('hello'))
#
# # 2. 生成绝对路径
# print(os.path.abspath('/tmp/hello'))
# print(os.path.abspath('hello.png'))
#
# # 3. 'hello.png'
# print(os.path.join('/home/kiosk', 'hello.png'))
# # 返回一个绝对路径: 当前目录的绝对路径+ 文件名/目录名
# print(os.path.join(os.path.abspath('.'), 'hello.png'))
#
#
# # 4.获取目录名或者文件名
# filename = '/home/kiosk/Desktop/201808python/day10/hello.png'
# print(os.path.basename(filename))
# print(os.path.dirname(filename))


# 5. 创建目录/删除目录
# mkdir -p qq/qq1/qq1   递归创建目录
# os.makedirs('img/films')
# os.mkdir('img')
# os.rmdir('img')

# 6. 创建文件/删除文件
# os.mknod('00_ok.txt')
# os.remove('00_ok.txt')

# 7. 文件重命名(mv)
# os.rename('data.txt', 'data1.txt')


# # 8. 判断文件或者目录是否存在
# print(os.path.exists('img'))
#
# # 9. 分离后缀名和文件名
# print(os.path.splitext('hello.png'))
# print(os.path.split('hello.png'))
#
# # 10. 将目录名和文件名分离
# print(os.path.split('/tmp/hello/hello.png'))

 

# # 练习:
# #       1. 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
# #       2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
#
# import string
#
# def gen_code(len=4):
#     # 随机生成4位的验证码
#     li = random.sample(string.ascii_letters+string.digits, len)
#     # 将列表元素拼接为字符串
#     return  "".join(li)
#
# def create_files():
#     # 随机生成100个验证码
#     li = {gen_code() for i in range(100)}
#
#     os.mkdir('img')
#     # # 随机生成四个数字
#     for name in li:
#         os.mknod('img/' + name  + '.png')
#
#
from collections import Iterable

import sys


def modify_suffix(dirname, old_suffix, new_suffix):
    """
    :param dirname: 操作的目录
    :param old_suffix: 原先的后缀名
    :param new_suffix: 新的后缀名
    :return:
    """
    # 1. 判断查找的目录是否存在, 如果不存在, 显示报错
    if exists(dirname):
        # 2. 找出所有以old_suffix(.png)结尾的
        # pngfiles = [ filename for filename in os.listdir(dirname)
        #             if filename.endswith(old_suffix)]
        pngfiles = filter(lambda  filename: filename.endswith(old_suffix), os.listdir(dirname))
        # 3. 将文件名和后缀名分开, 留下所有的文件名
        basefiles = [splitext(filename)[0] for filename in pngfiles]
        print(basefiles)
        # 4. 文件重命名
        for filename in basefiles:
            # 需要加上目录名
            oldname = join(dirname, filename+old_suffix)
            newname = join(dirname, filename+new_suffix)
            os.rename(oldname, newname )
            print("%s重命名为%s成功" %(oldname, newname))
    else:
        print("%s不存在, 不能操作......" %(dirname))


# 如果该脚本没有被调用, 则执行下面的代码;
if __name__ == '__main__':
    # **** 如何在执行脚本时, 接收用户传入的参数;
    # 判断用户传的参数是否为3个参数?
    if len(sys.argv) == 4:
        dirname = sys.argv[1]
        old_suffix = sys.argv[2]
        new_suffix = sys.argv[3]
        # modify_suffix('img', '.png', '.jpg')
        modify_suffix(dirname, old_suffix, new_suffix)
    else:
        print("""
    Usage: %s dirname old_suffix new_suffix
        
        """ %(sys.argv[0]))

 

11.小插曲

 

 

程序代码如下

 

 

   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值