GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • 莫烦PYTHON
  • 学习 ▾
  • 推荐学习顺序
  • 交互式学Python
  • 多进程 multiprocessing
  • 多线程 threading
  • 窗口视窗 Tkinter
  • 有趣的机器学习
  • 强化学习 Reinforcement Learning
  • 进化算法 Evolutionary Algorithm
  • Tensorflow
  • PyTorch
  • Theano
  • Keras

This view

  • Original page
  • New address

GeezerVison is showing mofanpy.com — 文件批量处理 | 莫烦Python

  • 支持

📢

莫烦有新起点啦!「莫烦 x 无限可能」— 关于 AI、行业、产品、教育的经验思考,欢迎来新站看看 →

« 没啥用计算器 字符串的高级玩法 »

文件批量处理

作者: 莫烦 编辑: 莫烦 发布于: 2021-06-02

我很常会批量处理一些文件,比如在 莫烦 Python 这个网站从 morvanzhou.github.io 迁移到 这里的时候, 我要重构所有的底层架构,从一个静态网页做成动态网页。其中有一个重要步骤就是批量处理所有的文件, 将指向 morvanzhou.github.io 的文本全部改成 mofanpy.com。

这节内容,我们就以这个为例,复现一下当时我处的困境,看我怎么用 Python 帮我自动化解决这个困境。

这一节主要涉及到的功能:

  • 找到所有文件
    • os.listdir()
    • os.path.join()
  • 找到文件特定字段
    • re.findall()
    • os.path.join()
  • 替换
    • os.path.join()
    • re.sub()
    • string.startswith()

我遇到的问题¶

具体来说,这个问题就是要将所有 莫烦 Python 的教学内容,批量将里面提到的 morvanzhou.github.io 改成 mofanpy.com。 如果你不会 Python,或者其他的语言,那你就只能手动,一个个打开这些文件,然后编辑替换所有有问题的文本。

filesystem

偶尔一两个文件这么处理还好,但是当时我的教程有 3-400 个,处理两天都处理不过来啊。 所以我只能求救我的 Python,让它帮我做这件事。

初步思考¶

首先需要简化问题,简化出来的话,其实就是要有三个步骤。

  1. 遍历所有的文本文件
  2. 找到文件中特定字段
  3. 替换掉这个特定字段

好,明白了这三步,我们就来分别用 python 和之前教学中的内容,解决这个问题吧。我在下面设计具体知识内容的时候,会引用到以前的教学,你可以当做回顾。 你就当做你在解决问题的时候,去搜索引擎上做的那些搜索行为就好了。

找到所有文件¶

怎么用 python 找到某个目录下的所有文件呢?其实我们在 os教学 中就已经提到过, 而且我们还能用 os 库做很多额外的处理。还不了解 os 的同学去这个链接 看看吧。

运行上面的代码,你可以看出,我们在 files 目录下,有很多个文本文件,我们成功的发现了这些文件。 下一步,我们需要能够打开这些文件,看到里面的内容。

找到文件特定字段¶

能看到文件名还不够,因为我们不知道每个文件中是什么内容,所以我们先写一个读取文件内容的功能,然后分别打开看看里面写了些什么,分析一下要怎么处理后面的步骤。 这里,我们就需要用到一个 for 循环来遍历所有的文件,并依次展示了。如果你还想回顾一下 for 循环的教程,请看到这里。 另外,我们还需要会使用 open 函数来打开文件,不然你都没打开,怎么知道里面有什么呢?读写文件的使用请看到这个教程。

很好,现在是能把所有的文件都读出来显示了,我们看到不同文件中有不同的文本,那么我们怎么定位到特定的网址文本呢? 这时,之前提到正则表达式的教程就能来拯救你了。

正则是一个非常有用,而且非常常用的技术。帮你找到混乱文本当中符合特定模式的文本。比如我要在一大串文本中找到一个网址。

牛逼,在这么复杂的情况下,这么多干扰项的情况下,mofanpy.com 这个字段都被你找到了。那我们就再进行下一步, 怎么将这个找到的文字替换掉。

替换¶

上面我们在演示正则的时候是指一个匹配的演示,现在我们要正式进入最惊心动魄的时刻了,项目的成功与否,都看这一步的处理了。 上面我们已经可以找到并读出所有的文件内容了,现在我们有两个方案,你看看你会选择哪个?

  1. 在原文本上替换,并覆盖原文本的内容;
  2. 复制出一个新的文件,将原文本替换过的文字拷贝到新文件中,原文件不改变。

其实最终怎么做,取决于你的这个文件处理系统需要怎么做。其实两种做法都是可以的,但是在你测试和验证程序的阶段,我建议你还是将改动过的文件,写入一个新的文件中, 不然原文件被覆盖了,你就改不回来了。

运行完上面的代码后,我们再从新文件中读出来看看内容有没有改好,验证一下。

这就完美了,我们不仅找到了要修改的,而且还修改了需要被修改的,并保存到了另一个地方,为后续操作留下空间。 这次的任务就圆满完成了。

总结¶

虽然这个任务十分简单,但是也蕴含着一些对项目的思考,包括如何定位问题,分析问题,并拆解问题,解决问题。 有了上一个没啥用计算器的项目,和这个项目, 你对用 Python 做项目应该是有了一个深度的理解。

好嘞,到目前这个阶段,你已经可以撒手去完成一些简单的项目了,后续的教学将更加集中在提升能力的方面,也会更加精彩。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat
« 没啥用计算器 字符串的高级玩法 »
    教程目录

    交互式学Python

      介绍

    • 课程介绍

      基础功能

    • 变量与运算

      循环、数据、判断

    • 条件判断
    • for 和 while 循环
    • 数据种类

      函数、类、模块

    • Function 函数
    • Class 类
    • Module 模块

      文件管理

    • 读写文件
    • 文件目录管理
    • 正则表达式
    • pickle/json 序列化

      异常检查和处理

    • 如何控制异常 try-except
    • 单元测试

      做个项目

    • 没啥用计算器
    • 文件批量处理
      • 我遇到的问题
      • 初步思考
      • 找到所有文件
      • 找到文件特定字段
      • 替换
      • 总结

      高阶内容

    • 字符串的高级玩法
    • Python的偷懒用法
    • 复制的"玄学"
    • 为什么要有生成器
    • 套娃的装饰器
    • Python 安装和依赖管理:Conda/Pip
    • Python编辑器

      进阶学习

    • 多线程多进程
    • Python 窗口部件
    • 数据三剑客 Numpy Pandas Matplotlib
    • 数据采集-爬虫技术
    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.