您的位置:首页 > 编程语言 > Python开发

Python文件操作----快速生成规律命名的大量文件,同时实现增删改查

2019-03-06 18:45 525 查看
版权声明:原创文章,欢迎转载,请注明出处,谢谢 https://blog.csdn.net/weixin_43329700/article/details/88247524

写在前面

今天在分类代码和整理文件时发现需要创建近100个文件夹,文件夹名呈规律性递增,如‘Question1-lv1’,‘Question2-lv1’, ‘Question(n)-lv1’, 这是问题数量的递增,然后便是问题等级的递增,Q1~Q30 为等级一类型,Q20~60为等级二,其余为等级三。在用鼠标点点点创建了5个文件以后,猛然醒悟:这样下去得创建到猴年马月,于是捣鼓了一下Python的文件操作。实现了一下功能:

  • 批量生成文件
  • 批量删除
  • 批量改名
  • 将同一段内容批量写进文件中
  • 创建文件夹的同时再在该文件夹下创建子文件夹(循环往复)
    技术不精,批量生成的文件夹的名字需要有规律哈哈
    不管我们在哪个行业,都值得不断学习提高效率的办法,我将程序打包后发给从事文书工作的亲戚们也受到了不少好评: 原来创建文件还可以这样做,比人手快多了。

准备工作

  1. Pycharm2017(懒于升级)
  2. 500ml水

首先,Python对文件实现操作需要用到 os 模块

import os

思路过程

首先我欲创建的带名字的文件夹们如下:

这里只是节选一部分作为例子说明哈。我们现在来逐步拆解思路
Step1:找规律,发现只有数字在不断增大(6–14),其余并没有变化。先来for一下输出6到14这几个数,可能这一步看起来比较幼稚,但从最简单的知识点开始想起往往能带来不一样的灵感。

for i in range(6, 15):  # range函数存在差一法则,即数学上的左闭右开区间
print(i, end=', ')   # end= 参数实现不换行输出,用 逗号+空格 隔开

结果如图

既然是要创建文件夹,那就来看看创建单个文件夹的文件操作。

新单词:dir
我爱学英语
abbr. 目录(directory);方向(direction);用法(directione);
指示(direct)
n. (Dir)人名;(塞)迪尔

新单词:path, mode, exit

  • path: 路径
  • mode:n. 模式;方式;风格;时尚
    n. (Mode)人名;(德、英、法、乍、瑞典)莫德
    这个mode直接理解为文件名就可以啦
  • exit:存在

即括号内有这三个参数可以选择,这里我们舍去参数path,表示就是在当前路径下面创建,即Pycharm左侧工作栏可以看到的,exit_ok: 表示如果文件夹已经存在,那就什么都不做,这里我给了这个exit_ok,加粗,因为有个重点,如果重复创建相同名字的文件夹,则会报错

makedirs:做 dir 嘶,这里有复数,难道就这么简单就可以创建目录们了吗?

import os
os.makedirs('这是要被创建的文件夹')

结果

只成功创建了一个,这个时候,我们在这个基础上再创建一个同名的文件夹,先是不添加 exit_ok=True 这个参数的

报错啦,牢记:同名文件夹已经存在,要么更换名字,要么添加exit参数
有点像 try–except—finally 捕获异常,先让程序运行再说,不要被一些细枝末节打扰卡住报错等等。

根据刚刚的思路热身我们可以发现,应该要有一个 “模板” ,也就是除了规律数字不同以外其他都相同的模板,然后将数字规律 逐个放入 文件夹名字中,也就是 新单词mode 这个参数里面。

构建模板

mode: Question()–lv2,中间的阔哈是要循环添加进去的数字
个人感觉精华全部在这里了,当时想着这么能够循环输出类似的效果

就在这时,灵光一闪,老早之前学习过 格式化输出

dir_number = 1
content = f'Question{dir_number}'   比 .format() 要快的方法
content2 = 'Question{}'.format(dir_number)
print(content)
print(content2)


这里用了一个用了一个更快的方法哈哈,在引号前面加个f,便可以直接在花括号中放入想要被格式化的东西哈,如果对格式化还不是很理解的朋友 可以看看下面哈

age = 20
age = str(age)
print("我今年" + age + '岁了。')
print(f'我今年{age}岁了')
print('我的年龄为{}'.format(age))

请看大屏幕

最短平快的 f与引号 这个组合,另外两个 隐约透露出一股小学生的气息
尤其是第一个

休息,喝500ml水

简短的休息过后,再次灵光一闪,这个 mode 不就是:
"Question{}–lv2" 吗?,于是赶紧放进循环

mode = 'Quesiton{}--Lv2'
for i in range(1,5):
print(mode.format(i))


这里我没有用 f + 引号 这个组合,因为我的mode本来就已经有引号了

结合

好了,离大功告成只剩一步了,只需要将print改成 os.马克敌人是 就行了,当然也不要忘了加上 exit_ok=True 这个参数,养成提前预测到异常出现的地方是一个非常好的习惯哈

mode = 'Quesiton{}--lv2'
for i in range(1,5):
os.makedirs(mode.format(i), exist_ok=True)

大功告成,请看左栏

批量创建文本文档,csv文件等等都是同样的思路哈

喝了500毫升水后

还是猛地发现我文件夹的命名有点问题,lv 不够 Lv 美观,完蛋了,难道要全部删除创建好的再来一次吗?经过第一次猛然醒悟以后便有了信心,不如来个循环更改名字?
说干就干,我们先来试一下更改单个文件夹的名字

一开始左栏有一个文件夹的名字为

os.rename('这个是要被创建的文件夹', '改名吧小老弟')


好了,不难理解,新单词:rename 括号里面的第一个参数:旧文件夹的名字,第二个:新文件夹的名字

重点

看到这里,大家肯定已经轻松知道要使用格式化,循环填补数字来实现改名了。
因为有两个参数,自然而然就应该能想到应该要两个格式化
来试一下

mode = 'Quesiton{}--lv2'
new_mode = 'Question{}--Lv2'
for i in range(1,5):
os.rename(mode.format(i), new_mode.format(i))


左栏便蹭蹭的变化了。

同理,创建5个文本文档搞一下

mode = '我是第{}个文件夹啊'
for i in range(1,5):
with open(mode.format(i) + '.txt', 'w', encoding='utf-8') as f:
pass

这里就不一一解释啦,pass为占位语句,想不出写什么,但是又要保持程序完整性,所以就先占个位置

大功告成,请看右边

批量写入相同的内容

content = '这个东西得想办法写进刚刚创建的五个文本文档(记事本)里面'

重点

写内容的时候应该改为追加写,即a:append,否则会覆盖掉之前的内容,不过因为这五个文件里面本来什么都没有所以这里可以不用管,但是为了保持良好的习惯还是 a它一下吧

content = '这个东西得想办法写进刚刚创建的五个文本文档(记事本)里面'mode = '我是第{}个文件夹啊'
for i in range(1,5):
with open(mode.format(i) + '.txt', 'a', encoding='utf-8') as f:
f.write(content)

覆盖写和追加写绝对是一个超级大坑,在两个不同的py文件也可以跨区域影响
坑点可以见我另一篇博客
https://blog.csdn.net/weixin_43329700/article/details/86768422

它进去了!!,另外五个文件也是这样。

写在后面

这篇文章只展示了非常小的一部分文件操作,还有各种骚操作有待发掘,望对大家有帮助,有什么更好的方法记得留言分享!PS:养成边编程边喝水的习惯很重要

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐