第五章 文件、目录和数据处理

Python Alan 6年前 (2019-02-25) 9915次浏览 0个评论 扫描二维码

精通Python自动化脚本-运维人员宝典完整目录:

第一章 Python脚本概述
第二章 Python脚本调试和性能测试
第三章 单元测试-单元测试框架的介绍
第四章 自动化常规运维活动
第五章 文件、目录和数据处理
第六章 文件存档、加密和解密
第七章 文本处理和正则表达式
第八章 文档和报告
第九章 操作各类文件
第十章 网络基础 – Socket编程
第十一章 使用Python脚本处理邮件
第十二章 使用Telnet和SSH远程监控主机
第十三章 创建图形化用户界面
第十四章 处理Apache和其它的日志文件
第十五章 SOAP和REST API通讯
第十六章 网络抓取 – 从网站上提取有用的信息
第十七章 数据收集及报表
第十八章 MySQL和SQLite数据库管理

系统运维人员会执行一些如处理不同文件、目录和数据的任务。本章中,我们将学习os模块。os模块提供了与操作系统进行交互的功能。Python编程人员可轻易地使用os模块来执行文件和目录操作。os模块为程序员提供了处理文件、路径、目录和数据的工具。

本章中我们将学习如下内容:

  • 使用os模块来处理目录
  • 复制、移动、重命名和删除数据
  • 处理路径、目录和文件
  • 对比数据
  • 合并数据
  • 模式匹配文件和目录
  • 元数据:数据的数据
  • 压缩和还原
  • 使用tarfile模块来创建TAR存档
  • 使用tarfile模块来检查TAR文件内容

使用os模块来处理目录

目录或文件夹是一个文件和子目录的集合。os模块提供了允许我们与操作系统交互的不同函数。这一部分中,我们将学习可在处理目录时使用的一些函数。

获取工作目录

要开始对目录进行处理,首先我们会获取当前工作目录的名称。os有一个getcwd()函数,使用它我们可以获取到当前的工作目录。启动python3终端并输入如下命令来获取当前目录名:

更换目录

使用os模块,我们可以更换当前工作目录。os模块中有一个chdir()函数可用于实现,示例如下:

列出文件和目录

列出目录内容在Python中也很容易。我们将使用os中带有的listdir()函数,它会返回当前工作目录的文件和目录名:

重命名目录

Python中的os模块有一个rename()函数,可帮助更换目录的名称:

复制、移动、重命名和删除数据

我们将学习系统运维人员处理数据的四个基本操作,即复制、移动、重命名和删除。Python内置一个名为shutil的模块,用于执行这些任务。使用shutil模块,我们也可以对数据执行更高级别的操作。在我们的程序中使用shutil模块,只需要编写import shutil导入语句即可。shutil模块提供了一些支持文件复制和删除操作的函数。我们来逐一学习这些操作。

复制数据

这一部分中,我们将来看如何使用shutil模块来复制文件。首先,我们会创建一个hello.py文件并在其它编写一些文本内容。

现在我们会在shutil_copy_example.py脚本中编写复制的代码。在其中编写如下内容:

运行脚本如下:

查看welcome.py脚本,我们会发现welcome.py中已成功地拷贝了hello.py中的内容。

移动/剪切数据

这里我们来看如何剪切数据。实现剪切我们可以使用shutil.move()。shutil.move(source, destination可以将文件从源地址移动到目的地址。下面我们来创建一个shutil_move_example.py脚本并编写如下内容:

运行脚本如下:

这一脚本中,我们剪切的文件为sample.txt,在/home/student 目录中。/home/student是我们的源文件夹/home/student/Desktop是我们目的文件夹。因此,在运行脚本后,sample.txt会从/home/student剪切到/home/student/Desktop目录中。

重命名数据

在前面的部分中,我们学习了如何使用shutil.move()来将文件由源目录移动到目标目录。使用shutil.move()可对文件进行重命名。创建一个shutil_rename_example.py脚本并添加如下内容:

运行脚本如下:

现在查看文件名,会被重命名为hello_renamed.py。

删除数据

我们将学习如何使用Python中的os模块删除文件和文件夹。os模块中的remove()方法将删除文件。如果尝试使用该方法删除目录将会返回OSError。要删除目录,使用rmdir()。

下面创建一个os_remove_file_directory.py脚本并编写如下内容:

运行脚本如下:

处理路径

下面我们将学习os.path()。它用于路径处理。这一部分中,我们来看os模块中针对路径名的函数。

补充:Alan 对 Python 进行了一下升级,方法如下:

启动python3终端:

  • os.path.absname(path): 返回路径名的绝对路径

  • os.path.dirname(path): 返回路径的目录名

  • os.path.basename(path): 返回路径的基本名称

  • os.path.exists(path): 如果引用的路径存在则返回 True

  • os.path.getsize(path): 以字节数返回输入文件的大小

  • os.path.isfile(path): 检查输入的路径是否为已有文件。如果是文件则返回True。

  • os.path.isdir(path): 检查输入的路径是否为已有目录。如果是目录则返回True。

对比数据

下面我们将学习如何在Python中比较数据。我们使用pandas模块来进行实现。

pandas是一个开源的数据分析库,提供易于使用的数据结构和数据分析工具。让我们导入和分析数据更为简单。

在开始示例之前,确保系统中安装了pandas。安装pandas的方法如下:

我们将学习一个使用pandas比较数据的示例。首先,我们来创建两个csv文件:student1.csv和student2.csv。我们将比较这两个csv文件并在结果中返回比较结果。创建以下两个csv文件:

创建student1.csv文件内容如下:

创建student2.csv文件内容如下:

下面我们创建compare_data.py脚本并编写如下内容:

运行脚本如下:

在上述的例子中,我们比较两个csv文件的数据:student1.csv和student2.csv。我们首先转化我们的数据帧(df1, df2)为集合 (s1, s2)。然后我们使用了symmetric_difference() 集合。因此它会检查s1和s2的对称性区别,然后我们打印出了结果。

合并数据

我们将学习如何在Python合并数据。为此,我们使用Python中的pandas库。要进行数据合并,我们将使用前一部分中使用的两个csv文件:student1.csv和student2.csv。

下面,创建merge_data.py脚本并编写如下代码:

运行脚本如下:

模式匹配文件和目录

这部分中我们将学习文件和目录的模式匹配。Python有一个glob模块,用于查找与指定模式相匹配的文件和目录名称。

下面我们来看一个示例。首先,创建一个pattern_match.py脚本并编写如下内容:

运行脚本如下:

注:以上目录及文件需自行创建

在前面的示例中,我们使用了Python模块来进行模式匹配。glob (pathname)将返回匹配pathname的名称列表。在我们的脚本中,我们传入了四个不同的glob()函数。第一个glob()中,我们传入的路径名为*.txt,这将返回所有后缀名为.txt文件名。在第二个glob()中,我们传入了 [0-9].txt,这将返回以数字开始的名称。在第三个glob()中,我们传入了**/*.txt,将返回文件名和路径名。它还会返回这些目录的文件名。在第四个glob()中,我们传入了**/,将仅返回目录名。

元数据:数据的数据

这部分我们将学习PyPDF2模块,有助于我们从pdf文件中提取元数据(metadata)。但首先什么是元数据呢?元数据是数据的数据。元数据是描述主要信息的结构性信息。它是一个数据的总结。包含我们实际数据相关的基本信息。帮助查找我们数据中的具体实例。

ℹ️确保将需提取信息的pdf文件放在相应目录中

首先安装PyPDF2模块,命令如下:

下面我们来编写脚本metadata_example.py,并查看如何获取元数据信息。我们使用Python来编写脚本:

译者注:
1、随机搜索了一本Python 方面的 pdf 图书Haltermanpythonbook.pdf用于本例测试
2、原书使用了 Python 2中的pyPdf,为统一版本,Alan 修改为针对 Python 3的PyPDF2

运行脚本如下:

在前述脚本中,我们使用了 Pyhon 3中的PyPDF2模块。首先,我们创建了一个变量file_name来存储 pdf 的路径。使用PdfFileReader() 来提取数据。变量pdf_data会存储pdf的相关信息。最后,我们编写for循环来获取元数据信息。

压缩和还原

这部分中我们将学习shutil模块中的make_archive()函数,可压缩整个文件夹。为此我们编写一个compress_a_directory.py脚本并编写如下内容:

运行脚本如下:

前述脚本shutil.make_archive()函数中,我们传入的第一个参数作为压缩文件的名称,zip是压缩的技术。work/是想要进行压缩的目录名。

要对压缩文件进行还原(解压缩),我们使用shutil模块中的unpack_archive() 函数。创建一个脚本unzip_a_directory.py并编写如下内容:

运行脚本如下:

现在检查我们的目录。可以得到解压目录后的所有内容。

使用tarfile模块来创建TAR存档

这部分帮助我们学习如何使用Python的tarfile模块来创建tar存档文件。

tarfile模块用于使用gzip、bz2等压缩技术来读取和写入tar存档文件。确保存在相关的文件和目录。下面创建一个tarfile_example.py脚本并编写如下内容:

运行脚本如下:

这时检查当前工作目录,可以看到已创建了work.tar.gz。

使用tarfile模块来检查TAR文件内容

这部分中我们将学习如何在不提取tar文件的情况下检查tar包里的内容。我们使用Python中的tarfile模块。

创建脚本examine_tar_file_content.py编写如下内容:

运行脚本如下:

在前面的例子中,我们使用了tarfile模块来查看所创建的tar文件的内容。我们使用了getnames()函数来读取数据。

总结

本章中我们学习了如何使用Python脚本来处理文件和目录。还学习了如何使用os模块来处理目录。以及如何拷贝、移动、重命名和删除文件和目录。我们学习了Python中的pandas模块,用于比较和合并数据。同时学习了使用tarfile模块来创建tar文件以及读取tar文件中的内容。我们在搜索文件和目录时还使用了模式匹配。

下一章中,我们将学习tar包和ZIP的创建。

☞☞☞ 第六章 文件存档、加密和解密

课后问题

  1. 如何在不论什么操作系统中(Windows, Linux)处理不同的路径?
  2. Python 中print()可以使用哪些不同参数?
  3. Python 中dir()关键字的用处是什么?
  4. pandas中的数据帧、序列是什么?
  5. 列表推导式是什么?
  6. 是否可以进行集合推导式和字典推导式?如果是如何做?
  7. 如何使用pandas数据帧打印最前/后的 N 行?
  8. 使用列表推导式来编写程序打印奇数?
  9. sys.argv的类型时什么?
    a) 集合
    b) 列表
    c) 元组
    d) 字符串

扩展阅读

喜欢 (2)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址