python之文件操作和os模块

一、文件操作

我们学习了linux后知道了在linux中,一切皆文件。那么在python中也有相应的文件操作。

文件的打开

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据。

"""
       是否有读权限?    是否有写权限?     文件不存在,是否会创建文件?        文件操作会清空文件内容么?
r           yes         no                  no                              no
w           no          yes                 yes                             yes
a           no          yes                 yes                             no
w+          yes         yes                 yes                             yes
a+          yes         yes                 yes                             no
r+          yes         yes                 no                              no
f = open('doc/passwd', 'w')
print(f.mode)
print(f.read())
"""

文件操作的基本方法:
在这里插入图片描述
文件打开后一定要记得关闭,因在系统中允许打开的文件数量有限。会占用系统资源。

f.close()

with语句工作原理

在with语句结束后,它会自动帮我们关闭文件,释放资源。
在这里插入图片描述

用文件操作实现文件的备份

import  os
def copy(source_file, dst_file):
    """
    实现拷贝文件的操作
    """
    if os.path.exists(source_file):
        # 将源文件的内容读出来
        f = open(source_file)
        content = f.read()
        f.close()
        # 写入目标文件
        dst_f = open(dst_file, 'w')
        dst_f.write(content)
        dst_f.close()
        print("拷贝%s为%s成功" %(source_file, dst_file))
    else:
        print("源文件%s不存在" %(source_file))
copy('/etc/passwd', 'doc/passwd-备份')

在这里插入图片描述

二、os模块的应用

os,语义为操作系统,处理操作系统相关的功能,可跨平台。 比如显示当前目录下所有文件/删除某个文件/获取文件大小等等一系列操作。
在这里插入图片描述
在这里插入图片描述

os模块的具体应同实例

题目需求:
1. 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
具体实现如下:
这里我们需要先做一个随机生成验证码的函数作为我们所要修改的文件名。

import string
import  random
import  os
def generate_code(length=4):
    """
    默认生成4位验证码: 由两个大写字母,一个小写字母和一个数字组成;
    :param length:
    :return:
    """
    # 从某个序列里面随机获取几个元素;
    # code_li = random.sample(string.ascii_letters + string.digits, length)
    code_li = random.sample(string.ascii_uppercase, 2) + random.sample(string.ascii_lowercase, 1) \
              + random.sample(string.digits, 1)
    # 将生成的验证码顺序打乱;
    random.shuffle(code_li)
    # 将列表拼接成字符串
    return  "".join(code_li)

def create_files():
    dirname = 'img'
    if not os.path.exists(dirname):
        os.mkdir(dirname)
        print("目录%s创建成功" %(dirname))


    # 循环100次,创建100个文件
    for count in range(100):
        # 随机生成文件名
        filename = generate_code() + '.png'
        full_filename = os.path.join(dirname, filename )
        os.mknod(full_filename)
        print("%s创建成功" %(full_filename))

create_files()

在这里插入图片描述
好了,现在我们创建好了以 '.png’为后缀的文件,下面就可以开始批量修改文件名了
具体代码实现:

import os
def modify_suffix(dirname, old_suffix, new_suffix):
    """
    批量修改文件名
    :param dirname: 操作的目录
    :param old_suffix: 原先的后缀名
    :param new_suffix: 新的后缀名
    :return:
    """
    # 0-1).判断源后缀名是否以点开头, 如果不是,则添加;
    if not old_suffix.startswith('.'):
        old_suffix = '.' + old_suffix
    # 0-2). 判断新的后缀名是否以点开头, 如果不是,则添加;
    if not new_suffix.startswith('.'):
        new_suffix = '.' + new_suffix
    # 1. 判断查找的目录是否存在, 如果不存在, 显示报错
    if not os.path.exists(dirname):
        print("Error: 目录%s不存在" % (dirname))
    # 2. 如果文件存在,做如下操作:
    else:
        # 2-1). 列出指定目录的所有文件名;
        filenames = os.listdir(dirname)
        # 2-2). 依次遍历目录的每一个文件;
        for filename in filenames:
            # 2-3). 如果文件是以old_suffix结尾,则对改文件重命名;
            if filename.endswith(old_suffix):
                # 修改后缀名
                # 2-3-1). 将后缀名和文件名本身分隔开; hello.png === hello .png, 并生成新的文件名
                new_filename = os.path.splitext(filename)[0] + new_suffix
                full_old_filename = os.path.join(dirname, filename)
                full_new_filename = os.path.join(dirname, new_filename)
                # 2-3-2). 重命名
                os.rename(full_old_filename, full_new_filename)
                print("重命名【%s】 为【%s】成功!" % (filename, new_filename))

modify_suffix('img', '.png', '.jpg')

运行代码我们就可以得到以下结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值