面向非工程师的实用 Python 编程

尚无读者喜欢这个。
Real python in the graphic jungle

Jen Wike Huger 拍摄照片,CC BY-SA;原始照片由 Torkild Retvedt 拍摄

“学习编码”是 21 世纪的新口号。但这句话常常忽略了编程的真正用途,尤其当你不打算转行成为软件工程师时。仅仅因为我们被电脑包围,并不意味着普通人需要能够重新编程他们的智能冰箱。

但是编程技能可以帮助解决不常见的、用户特定的问题。办公室职员、学生、管理人员以及任何使用电脑的人都遇到过繁琐的任务。也许他们需要重命名几百个文件。也许他们需要在特定网站更新时发送通知。或者他们可能需要将 Excel 电子表格中的几百行复制到网页表单中。

这些问题对于商业软件来说太具体而无法解决,但通过一些编程知识,用户可以创建自己的解决方案。学习编码可以将用户变成高级用户。

处理文件

例如,假设你有一个文件夹,里面有数百个文件。每个文件的名称都类似于 Apr2015.csv、Mar2015.csv、Feb2015.csv 等,一直追溯到 1980 年。你必须按年份对这些文件进行排序。但是你可用的自动排序不起作用;你无法按字母顺序对它们进行排序。你可以重命名每个文件,使年份排在第一位,并将所有月份替换为数字,这样自动排序就可以工作,但是重命名数百个文件会让人感到极其无聊,而且也会花费数小时。

这是一个 Python 程序,我花了大约 15 分钟编写,它可以代替完成这项工作

import os, shutil

monthMapping = {'Jan': '1', 'Feb': '2', 'Mar': '3', 'Apr': '4', 'May': '5', 'Jun': '6', 'Jul': '7', 'Aug': '8', 'Sep': '9', 'Oct': '10', 'Nov': '11', 'Dec': '12'}

for filename in os.listdir():
    monthPart = filename[:3]
    yearPart = filename[3:7]
    newFilename = yearPart + '_' + monthMapping[monthPart] + '.csv'
    print('Renaming ' + filename + ' to ' + newFilename)
    #shutil.move(filename, newFilename)

Python 是初学者的理想语言,因为它语法简单。它不是一系列神秘的 1 和 0;你无需任何编程经验即可理解。让我们逐步了解这个程序。

首先,Python 的 osshutil 模块具有可以完成我们需要的 文件系统工作的函数。我们不必自己编写代码,只需在第一行导入这些模块即可。接下来,一个名为 monthMapping 的变量包含一个字典,该字典将月份缩写映射到月份数字。如果 'Apr' 是月份缩写,monthMapping['Apr'] 将为我们提供月份数字。

for 循环在当前目录或文件夹中的每个文件上运行代码。os.listdir() 函数返回文件列表。

文件名的前三个字母将存储在名为 monthPart 的变量中。这只是使代码更具可读性。类似地,文件名中的年份存储在名为 yearPart 的变量中。

newFilename 变量将由 yearPart、下划线、月份数字(从 monthMapping[monthPart] 返回)和 .csv 文件扩展名创建。在程序运行时在屏幕上显示输出很有帮助,因此下一行打印新文件名。

最后一行调用 shutil 模块的 move() 函数。通常,此函数将文件移动到具有不同名称的不同文件夹,但通过使用相同的文件夹,它只是重命名每个文件。行首的 # 表示整行是 Python 忽略的注释。这使你可以运行程序而无需重命名文件,以便你可以检查打印的输出看起来是否正确。当你准备好实际重命名文件时,你可以删除 # 并再次运行程序。

计算机时间很便宜/软件开发人员时间很昂贵

这个程序不到一秒钟即可重命名数百个文件。但是,即使你必须处理千兆字节的数据,你也不需要能够编写“优雅”的代码。如果你的代码运行需要 10 个小时而不是 2 个小时,因为你不是算法专家,那仍然比找到软件开发人员,向他们解释你的需求,协商合同,然后验证他们的工作要快得多。而且肯定比手工处理所有这些数据要快。简而言之,不要担心程序的效率:计算机处理时间很便宜;昂贵的是开发人员的时间。

更多 Python 内容

我的新书《用 Python 自动化无聊的东西》,由 No Starch Press 出版,以 Creative Commons 许可发布,教初学者程序员如何编写 Python 代码来处理无聊的任务。它跳过了抽象的计算机科学方法,专注于实际应用。你可以在线阅读完整的书籍。电子书和印刷版可从 Amazon、nostarch.com 和书店购买。

许多编程教程都使用诸如计算斐波那契数或解决“8 皇后”国际象棋问题之类的示例。用 Python 自动化无聊的东西 教你编写代码来解决现实世界中的问题。本书的第一部分是通用的 Python 教程。本书的第二部分涵盖了诸如读取 PDF、Word、Excel 和 CSV 文件之类的内容。你将学习如何从网站上抓取数据。你将能够按照计划启动程序,并通过电子邮件或短信发送自动通知。如果你需要从繁琐的点击和输入中解脱出来,你将学习如何编写程序来为你控制键盘和鼠标。

标签
User profile image.
Al Sweigart 是旧金山的一名软件开发人员和科技书籍作者。他撰写了几本 Python 书籍,这些书籍以 Creative Commons 许可在 https://inventwithpython.com 上提供

2 条评论

很棒的文章,展示了简单的一点 Python 代码如何帮助你解决令人麻木的问题。
我唯一想更改的是添加一个检查以仅重命名 CSV 文件。

抱歉,格式不起作用

=========
import os, shutil

monthMapping = {'Jan': '1', 'Feb': '2', 'Mar': '3', 'Apr': '4', 'May': '5', 'Jun': '6', 'Jul': '7', 'Aug': '8', 'Sep': '9', 'Oct': '10', 'Nov': '11', 'Dec': '12'}

for filename in os.listdir("./")
if filename.endswith(".csv")
monthPart = filename[:3]
yearPart = filename[3:7]
newFilename = yearPart + '_' + monthMapping[monthPart] + '.csv'
print('正在将 ' + filename + ' 重命名为 ' + newFilename)
shutil.move(filename, newFilename)

===========

正如“软件开发人员时间确实昂贵”一样,为什么首先对数组的月份进行编号而不是使用它们的索引呢?

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可获得许可。
© . All rights reserved.