python导入数据并重命名_Python重命名文件的两种方式,os和shutil模块,你会选择哪一个?...

本文介绍了Python中重命名文件的两种常见方法:os.rename()和shutil.move()。os.rename()适用于简单重命名,但会抛出异常如果目标文件已存在。而shutil.move()不仅能够重命名,还能实现文件移动,更加灵活。通过案例分析,展示了如何使用这两种方法重命名大量文件,并强调了shutil.copyfile在处理文件数据时的灵活性。
摘要由CSDN通过智能技术生成

最近,在做一个项目,里面有一项需求就是对项目生成的若干个文件名称进行重命名操作。一个简单需求,基础知识掌握不牢固,实现起来往往很费时间。

ad9775254483bea640a9321084396b6a.png需要基础哦

下面,和大家一起来探讨下Python中重命名文件的几个常用方法,使大家在以后遇到类似问题时,少踩坑。为了便于大家理解掌握,最后和大家分享一个自己编写的案例。

8b9dffbc2de64d88123ac1a52bbfebd5.png开始了

不废话,开始吧!

01使用内置os模块的rename方法

需要导入os模块

import os

重命名文件

os.rename(source,destinate)

source-源文件或者文件夹

destinate-目标文件或者文件夹

a3eea7f8db9faa13a84dd696cc1dc910.png下面是重点哦

需要说明的几个问题:

rename功能并非“重命名”这一单一功能。此外,它兼具复制并重命名。如果你想将文件重命名后复制到另一个文件夹下,直接使用rename也可以实现这一功能。比如,我想把当前目录中文件test重命名为test2并复制到当前文件夹bob下。可使用os.rename('test', 'bob\\test2')

重命名文件或者文件夹时,如果文件或者文件夹在目标中已存在,则抛出FileExistsError异常,提示无法创建文件,重命名失败。

f07dd52f4505c89813706706342cb35a.png这点很好理解,跟着系统走

source或destinate不存在时抛出FileNotFoundError异常。

474ee11d76331454501327be5da0e73b.png找不到肯定无法重命名了

当把文件夹移动到该文件夹内并重命名时,抛出PermissionError异常,这点务必注意(项目如果有此需求,要另辟蹊径)。

c13c547d0986ab16b26befc30b0e13a5.png内部嵌套很容易引发问题哦

如果该文件(文件夹)是隐藏文件(文件夹),这一方法同样可以找到并重命名该文件(这一点很神奇,大家记住的话能做很多事!)

02使用内置库shutil的move方法

我们知道shutil的主要作用其实是拷贝文件。当我们拷贝过程中改变文件或文件夹名称也就间接实现了文件或文件夹重命名的功能。示例如下:

56acbc5666369c425cf9ce82d4338f76.png使用讲解

shutil在处理文件和文件夹过程中,同os模块不同之处在于,shutil处理移动、复制文件(文件夹)操作时,更加灵活,我们来看下面几个例子。

不改变文件名称,直接移动文件数据。看下面的例子,假定我们有文件1、文件2两个文件,内容如下

06f7247fe2320edc49b6bf5b16c5f49b.png文件1、文件2内容

当我们执行下面代码

f1 = open('文件1.txt')

f2 = open('文件2.txt', 'w')

shutil.copyfileobj(f1,f2)

f1.close()

f2.close()

后打开文件1、文件2进行对比。

c64bc7b374dd5cb3c2128c1198cd3110.png执行后文件1、文件2内容对比

可以看到,文件1的数据覆盖copy给文件2,shutilfileobj方法可以处理文件流,并不是单纯重命名文件这么简单(os.rename方法是不可以向已经存在的文件写入数据的)。

如果确定重命名过程中不需要文件数据交互,则直接使用copyfile方法shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy(注意这里是覆盖copy)

同上例,我们进行对比分析,注意文件1、文件2内容有变化

8af94a4b13c140187924a47e53570f86.png执行前

执行shutil.copyfile('文件1.txt', '文件2.txt')后结果如下

5cc55296a3129ebe26fbec151ec1e83f.png执行后文件对比

shutil甚至可以拷贝源文件的权限(使用copystat方法)、文件和状态信息(copy2)等。

这里小伙伴可能有疑虑了,我们探讨的是文件重命名,为什么shutil举一大堆copy的例子?呵呵,大家仔细想想copy后改变文件名称不就实现重命名的功能了吗?

0d045aae4644d96df3f09d71341c8ba5.png复制和重命名

延伸扩展,对于文件夹重命名,使用shutil.move(源文件,指定路径),可以实现递归移动一个文件(当然重命名也不在话下)。这里递归移动就是说它不像os.rename()方法,作为文件夹,它可以自己把自己移动到自己内部!呵呵,很绕口……

03os.rename方法和shutil.copyfile方法对比

从上面的例子对比我们看到,os.rename()和shutil.copyfile()都可以实现文件重命名的功能即使存在文件2,将同一目录下文件1重命名为文件夹2后,使用shutil.copyfile方法会覆盖保存。这是shutil.copy方法和os.rename方法的不同之处shutil.move方法可以实现文件夹的递归移动,这里不做演示,大家自己试验

9874bf8530229958186da9726f85a53f.pngshutil.copyfile比os.rename更加灵活

相比之下,shutil.copyfile方法更加灵活,它可以将文件处理后进行重命名哦,这点很有用!

04一个很有意思的案例

接下来,我们在一个文件夹下创建1000个随机文件,然后使用shutil方法重命名这些文件。来形象了解下文件重命名过程。

不赘述,直接上代码

b18daa2292d5446e7427fcedfd17c2ca.png案例代码

我们来看下运行效果,如下图

使用createTxtFile()函数随机生成100个文件

d9264f90e4b87576a75bb631ccff81c3.png随机生成100个文件

重命名文件后效果展示

d754af0584aa33c34279991803c600e6.png重命名文件,加入文件编号

好了,今天的内容就到这里,喜欢Python编程的小伙伴关注我,后续推出更加精彩的实例展示。

欢迎下方留言!本文为作者原创,转载请私信联系作者!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值