在本章中,您将学习如何使用各种类型的文件,例如 PDF 文件、Excel、CSV 和txt文件。Python 有用于对这些文件执行操作的模块。您将学习如何使用 Python 打开、编辑和获取这些文件中的数据。
本章将介绍以下主题:
- 使用 PDF 文件
- 使用 Excel 文件
- 使用 CSV 文件
- 使用
txt文件
在本节中,我们将学习如何使用 Python 模块处理 PDF 文件。PDF 是一种广泛使用的文档格式,PDF 文件具有.pdf扩展名。Python 有一个名为PyPDF2的模块,用于对pdf文件执行各种操作。这是第三方模块,它是作为 PDF 工具包构建的 Python 库。
我们必须先安装这个模块。要安装PyPDF2,请在终端中运行以下命令:
pip3 install PyPDF2现在,我们将研究处理 PDF 文件的一些操作,例如读取 PDF、获取页数、提取文本和旋转 PDF 页面。
在本节中,我们将使用PyPDF2模块阅读 PDF 文件。此外,我们还将获得该 PDF 的页数。此模块有一个名为PdfFileReader()的函数,用于帮助读取 PDF 文件。确保系统中有 PDF 文件。现在,我的系统中存在test.pdf文件,因此我将在本节中使用该文件。输入您的 PDF 文件名以代替test.pdf。创建一个名为read_pdf.py的脚本,并在其中写入以下内容:
import PyPDF2 with open('test.pdf', 'rb') as pdf:
read_pdf= PyPDF2.PdfFileReader(pdf)
print("Number of pages in pdf : ", read_pdf.numPages)运行脚本,您将获得以下输出:
student@ubuntu:~/work$ python3 read_pdf.py输出结果如下:
Number of pages in pdf : 20在前面的示例中,我们使用了PyPDF2模块。接下来,我们创建了一个pdf文件对象。PdfFileReader()将读取创建的对象。阅读完 PDF 文件后,我们将使用numPages属性获取该pdf文件的页数。本例为20页。
为了提取pdf文件的页面,PyPDF2模块使用extractText()方法。创建一个名为extract_text.py的脚本,并在其中写入以下内容:
import PyPDF2 with open('test.pdf', 'rb') as pdf:
read_pdf = PyPDF2.PdfFileReader(pdf) pdf_page = read_pdf.getPage(1) pdf_content = pdf_page.extractText() print(pdf_content) 运行脚本,您将获得以下输出:
student@ubuntu:~/work$ python3 extract_text.py输出结果如下:
3Pythoncommands 9 3.1Comments........................................ .9 3.2Numbersandotherdatatypes........................ ......9 3.2.1The type function................................9 3.2.2Strings....................................... 10 3.2.3Listsandtuples................................ ..10 3.2.4The range function................................11 3.2.5Booleanvalues................................. .11 3.3Expressions..................................... ...11 3.4Operators.......................................在前面的示例中,我们创建了一个文件读取器对象。pdf读卡器对象有一个名为getPage()的函数,它获取页码(从0th索引开始)作为参数,并返回页面对象。接下来,我们使用了extractText()方法,它将从getPage()中提到的页码中提取文本。页面索引从0开始。
在本节中,我们将了解如何旋转 PDF 页面。为此,我们将使用PDF对象的rotate.Clockwise()方法。创建一个名为rotate_pdf.py的脚本,并在其中写入以下内容:
import PyPDF2
with open('test.pdf', 'rb') as pdf:
rd_pdf = PyPDF2.PdfFileReader(pdf)
wr_pdf = PyPDF2.PdfFileWriter()
for pg_num in range(rd_pdf.numPages):
pdf_page = rd_pdf.getPage(pg_num)
pdf_page.rotateClockwise(90)
wr_pdf.addPage(pdf_page)
with open('rotated.pdf', 'wb') as pdf_out:
wr_pdf.write(pdf_out)
print("pdf successfully rotated")运行脚本,您将获得以下输出:
student@ubuntu:~/work$ python3 rotate_pdf.py输出结果如下:
pdf successfully rotated在上例中,对于pdf的旋转,我们首先创建原始pdf文件的pdf文件读取器对象。然后,旋转的页面将写入新的pdf文件。因此,为了写入新的pdf,我们使用PyPDF2模块的PdfFileWriter()功能。新的pdf文件将以名称rotated.pdf保存。现在,我们将使用rotateClockwise()方法旋转pdf文件的页面。然后,使用addPage()方法,将页面旋转到pdf。现在,我们必须将这些pdf页面写入一个新的pdf文件。因此,首先我们必须打开新文件对象(pdf_out并使用pdfwriter 对象的write()方法向其写入pdf页面。所有这些之后,我们将关闭原始(test.pdf文件对象和新(pdf_out文件对象。
在本节中,我们将使用扩展名为.xlsx的 Excel 文件。此文件扩展名用于 Microsoft Excel 使用的开放式 XML 电子表格文件格式。
Python 有不同的模块:xlrd、pandas 和openpyxl来处理 Excel 文件。在本节中,我们将学习如何使用这三个模块处理 Excel 文件。
首先,我们将看一个使用xlrd模块的示例。xlrd模块用于读取、编写和修改 Excel 电子表格,并完成大量工作。
首先,我们必须安装xlrd模块。在终端中运行以下命令安装xlrd模块:
pip3 install xlrdNote: Make sure you have an Excel file present in your system. I have sample.xlsx present in my system. So I'm going to use that file throughout this section.
我们将了解如何读取 Excel 文件以及如何从 Excel 文件中提取行和列。
在本节中,我们将了解如何读取 Excel 文件。我们将使用xlrd模块。创建一个名为read_excel.py的脚本,并在其中写入以下内容:
import xlrd excel_file = (r"/home/student/sample.xlsx") book_obj = xlrd.open_workbook(excel_file) excel_sheet = book_obj.sheet_by_index(0) result = excel_sheet.cell_value(0, 1)
print(result)运行脚本,您将获得以下输出:
**```py student@ubuntu:~$ python3 read_excel.py
输出结果如下:
```py
First Name
在前面的示例中,我们导入了xlrd模块来读取 Excel 文件。我们还提到了 Excel 文件的位置。然后,我们创建了一个 file 对象,然后我们提到了索引值,以便读取将从该索引开始。最后,我们打印了结果。
在本节中,我们将从 Excel 工作表中提取列名。创建一个名为extract_column_names.py的脚本,并在其中写入以下内容:
import xlrd excel_file = ("/home/student/work/sample.xlsx") book_obj = xlrd.open_workbook(excel_file) excel_sheet = book_obj.sheet_by_index(0) excel_sheet.cell_value(0, 0) for i in range(excel_sheet.ncols):
print(excel_sheet.cell_value(0, i))运行脚本,您将获得以下输出:
**```py student@ubuntu:~/work$ python3 extract_column_names.py
输出结果如下:
```py
Id First Name Last Name Gender Age Country
在前面的示例中,我们从 Excel 工作表中提取列名。我们使用ncols属性获取列名。
在继续使用 Pandas 读取 Excel 文件之前,首先我们必须安装pandas模块。我们可以使用以下命令安装pandas:
pip3 install pandasNote: Make sure you have an Excel file present in your system. I have sample.xlsx present in my system. So I am going to use that file throughout this section.
现在,我们将看一些使用pandas的示例。
在本节中,我们将使用pandas模块读取 Excel 文件。现在,让我们看一个读取 Excel 文件的示例。
创建一个名为rd_excel_pandas.py的脚本,并在其中写入以下内容:
import pandas as pd
excel_file = 'sample.xlsx'
df = pd.read_excel(excel_file)
print(df.head())运行前面的脚本,您将获得以下输出:
student@ubuntu:~/test$ python3 rd_excel_pandas.py输出结果如下:
OrderDate Region ... Unit Cost Total
0 2014-01-09 Central ... 125.00 250.00
1 6/17/15 Central ... 125.00 625.00
2 2015-10-09 Central ... 1.29 9.03
3 11/17/15 Central ... 4.99 54.89
4 10/31/15 Central ... 1.29 18.06在前面的示例中,我们使用pandas模块读取 Excel 文件。首先,我们导入了pandas模块。然后,我们创建了一个名为excel_file的字符串来保存要打开的文件的名称,我们希望使用 pandas 对其进行操作。后来,我们创建了一个df data frame对象。在本例中,我们使用 pandas 的read_excel方法使用默认函数从 Excel 文件中读取数据。读数从索引 0 开始。最后,我们打印了pandas数据帧。
当我们使用 pandas 模块使用read_excel方法读取 Excel 文件时,我们还可以读取该文件中的特定列。对于读取特定列,我们需要使用read_excel方法中的usecols参数。
现在,让我们看一个读取 Excel 文件中特定列的示例。创建一个名为rd_excel_pandas1.py的脚本,并在其中写入以下内容:
import pandas as pd
excel_file = 'sample.xlsx'
cols = [1, 2, 3]
df = pd.read_excel(excel_file , sheet_names='sheet1', usecols=cols)
print(df.head())运行前面的脚本,您将获得以下输出:
student@ubuntu:~/test$ python3 rd_excel_pandas1.py输出结果如下:
Region Rep Item
0 Central Smith Desk
1 Central Kivell Desk
2 Central Gill Pencil
3 Central Jardine Binder
4 Central Andrews Pencil在前面的示例中,首先我们导入了 pandas 模块。然后,我们创建了一个名为excel_file的字符串来保存文件名。然后我们定义了cols变量,并将列的索引值放入其中。因此,当我们使用read_excel方法时,在该方法中,我们还提供了usecols参数来通过索引获取特定列,这是我们之前在cols变量中定义的。因此,在运行脚本之后,我们只从 Excel 文件中获取特定列。
我们还可以使用 pandas 模块对 Excel 文件执行各种操作,例如读取缺少数据的 Excel 文件、跳过特定行以及读取多个 Excel 工作表。
openpyxl是一个 Python 库,用于读取和写入xlsx、xlsm、xltx和xltm文件。首先,我们需要安装openpyxl.并运行以下命令:
pip3 install openpyxl现在,我们来看一些使用openpyxl的例子。
在本节中,我们将学习使用openpyxl创建新的 Excel 文件。创建一个名为create_excel.py的脚本,并在其中写入以下内容:
from openpyxl import Workbook book_obj = Workbook() excel_sheet = book_obj.active excel_sheet['A1'] = 'Name' excel_sheet['A2'] = 'student' excel_sheet['B1'] = 'age' excel_sheet['B2'] = '24' book_obj.save("test.xlsx") print("Excel created successfully")运行脚本,您将获得以下输出:
student@ubuntu:~/work$ python3 create_excel.py输出结果如下:
Excel created successfully现在,检查您当前的工作目录,您会发现test.xlsx已成功创建。在前面的示例中,我们将数据写入四个单元格。然后,从openpyxl模块导入Workbook类。工作簿是文档所有其他部分的容器。接下来,我们将参考对象设置为活动表,并在单元格A1、A2和B1、B2中写入值。最后,我们使用save()方法将内容写入test.xlsx文件。
在本节中,我们将在 Excel 中附加值。为此,我们将使用append()方法。我们可以在当前工作表的底部添加一组值,并将这些值放入其中。创建一个名为append_values.py的脚本,并在其中写入以下内容:
from openpyxl import Workbookbook_obj = Workbook() excel_sheet = book_obj.active rows = (
(11, 12, 13), (21, 22, 23), (31, 32, 33), (41, 42, 43) ) for values in rows: excel_sheet.append(values) print() print("values are successfully appended") book_obj.save('test.xlsx')wb.save('append_values.xlsx')运行脚本,您将获得以下输出:
student@ubuntu:~/work$ python3 append_values.py输出结果如下:
values are successfully appended在前面的示例中,我们在append_values.xlsx文件表中添加了三列数据。我们存储的数据是在一个元组的元组中,为了附加数据,我们逐行遍历容器,并使用append()方法插入它。
在本节中,我们将阅读多个单元格。我们将使用openpyxl模块。创建一个名为read_multiple.py的脚本,并在其中写入以下内容:
import openpyxl book_obj = openpyxl.load_workbook('sample.xlsx') excel_sheet = book_obj.active cells = excel_sheet['A1': 'C6'] for c1, c2, c3 in cells:
print("{0:6} {1:6} {2:6}".format(c1.value, c2.value, c3.value))运行脚本,您将获得以下输出:
**```py student@ubuntu:~/work$ python3 read_multiple.py
输出结果如下:
```py
Id First Name Last Name
101 John Smith 102 Mary Williams 103 Rakesh Sharma 104 Amit Roy105 Sandra Ace
在前面的示例中,我们使用range操作读取三列的数据。然后,我们从单元格A1 – C6读取数据。
同样,我们可以使用openpyxl模块在 Excel 文件上执行许多操作,例如合并和拆分单元格。
CSV格式代表逗号分隔值。逗号用于分隔记录中的字段。它们通常用于导入和导出电子表格和数据库的格式。
CSV 文件是一种纯文本文件,它使用特定类型的结构来排列表格数据。Python 有内置的csv模块,允许 Python 解析这些类型的文件。csv模块主要用于处理从电子表格导出的数据,以及文本文件格式的数据库、字段和记录。
csv模块内置了所有必需的功能,如下所示:
csv.reader:此函数用于返回一个reader对象,该对象迭代 CSV 文件的行csv.writer:此函数用于返回writer对象,将数据写入 CSV 文件csv.register_dialect:此功能用于注册 CSV 方言csv.unregister_dialect:此功能用于注销 CSV 方言csv.get_dialect:此函数用于返回具有给定名称的方言csv.list_dialects:此函数用于返回所有注册方言csv.field_size_limit:此函数用于返回解析器允许的当前最大字段大小
在本节中,我们将只看csv.reader和csv.writer。
Python 有一个内置模块csv,我们将在这里使用它来处理 CSV 文件。我们将使用csv.reader模块读取 CSV 文件。创建一个名为csv_read.py的脚本,并在其中写入以下内容:
import csv csv_file = open('test.csv', 'r') with csv_file:
read_csv = csv.reader(csv_file) for row in read_csv: print(row)运行脚本,您将获得以下输出:
**```py student@ubuntu:~$ python3 csv_read.py
输出结果如下:
```py
['Region', 'Country', 'Item Type', 'Sales Channel', 'Order Priority', 'Order Date', 'Order ID', 'Ship Date', 'Units Sold'] ['Sub-Saharan Africa', 'Senegal', 'Cereal', 'Online', 'H', '4/18/2014', '616607081', '5/30/2014', '6593'] ['Asia', 'Kyrgyzstan', 'Vegetables', 'Online', 'H', '6/24/2011', '814711606', '7/12/2011', '124'] ['Sub-Saharan Africa', 'Cape Verde', 'Clothes', 'Offline', 'H', '8/2/2014', '939825713', '8/19/2014', '4168'] ['Asia', 'Bangladesh', 'Clothes', 'Online', 'L', '1/13/2017', '187310731', '3/1/2017', '8263'] ['Central America and the Caribbean', 'Honduras', 'Household', 'Offline', 'H', '2/8/2017', '522840487', '2/13/2017', '8974'] ['Asia', 'Mongolia', 'Personal Care', 'Offline', 'C', '2/19/2014', '832401311', '2/23/2014', '4901'] ['Europe', 'Bulgaria', 'Clothes', 'Online', 'M', '4/23/2012', '972292029', '6/3/2012', '1673'] ['Asia', 'Sri Lanka', 'Cosmetics', 'Offline', 'M', '11/19/2016', '419123971', '12/18/2016', '6952'] ['Sub-Saharan Africa', 'Cameroon', 'Beverages', 'Offline', 'C', '4/1/2015', '519820964', '4/18/2015', '5430'] ['Asia', 'Turkmenistan', 'Household', 'Offline', 'L', '12/30/2010', '441619336', '1/20/2011', '3830']
在前面的程序中,我们将test.csv文件打开为csv_file。然后,我们使用csv.reader()函数将数据提取到reader对象中,我们可以对该对象进行迭代以获得数据的每一行。现在,我们来看看第二个函数,csv.Writer()
为了在csv文件中写入数据,我们使用csv.writer模块。在本节中,我们将把一些数据存储到 Python 列表中,然后将这些数据放入csv文件中。创建一个名为csv_write.py的脚本,并在其中写入以下内容:
import csv write_csv = [['Name', 'Sport'], ['Andres Iniesta', 'Football'], ['AB de Villiers', 'Cricket'], ['Virat Kohli', 'Cricket'], ['Lionel Messi', 'Football']] with open('csv_write.csv', 'w') as csvFile:
writer = csv.writer(csvFile) writer.writerows(write_csv) print(write_csv)运行脚本,您将获得以下输出:
student@ubuntu:~$ python3 csv_write.py输出结果如下:
[['Name', 'Sport'], ['Andres Iniesta', 'Football'], ['AB de Villiers', 'Cricket'], ['Virat Kohli', 'Cricket'], ['Lionel Messi', 'Football']]在前面的程序中,我们创建了一个名为write_csv的列表,其中包含一个Name及其Sport。然后,在创建列表后,我们打开新创建的csv_write.csv文件,并使用csvWriter()功能将write_csv列表插入其中。
纯文本文件用于存储仅表示字符或字符串的数据,不考虑任何结构化元数据。在 Python 中,不需要导入任何外部库来读取和写入文本文件。Python 提供了一个内置函数来创建、打开、关闭以及写入和读取文本文件。要执行这些操作,有不同的访问模式来控制打开文件中可能的操作类型。
Python 中的访问模式如下所示:
- R****仅 ead 模式
'r'此模式打开一个文本文件用于此目的。如果该文件不存在,则会引发 I/O 错误。我们也可以将此模式称为打开文件的默认模式。 ***** 读写模式('r+':该模式打开一个文本文件用于读写目的,如果文件不存在,则会引发 I/O 错误。***** 只写模式('w':该模式将打开一个文本文件进行写入。如果文件不存在,它将创建该文件,对于现有文件,数据将被覆盖。 读写模式('w+':该模式将打开一个文本文件进行读写。对于现有文件,数据将被覆盖。**** 仅追加模式('a':此模式将打开文本文件进行写入。如果文件不存在,它将创建该文件,并且数据将插入到现有数据的末尾。*** 追加读取模式('a+':该模式将打开文本文件进行读取和写入。如果文件不存在,它将创建该文件,并且数据将插入到现有数据的末尾。************
******# open()函数
此函数用于打开文件,不需要导入任何外部模块。
语法如下:
Name_of_file_object = open("Name of file","Access_Mode")对于前面的语法,文件必须位于 Python 程序所在的同一目录中。如果文件不在同一目录中,那么我们还必须在打开文件时定义文件路径。此条件的语法如下所示:
Name_of_file_object = open("/home/……/Name of file","Access_Mode")打开文件的open函数为"test.txt"。
该文件与append模式在同一目录下:
text_file = open("test.txt","a")如果文件不在同一目录下,我们需要在append模式下定义路径:
text_file = open("/home/…../test.txt","a")此函数用于关闭文件,从而释放文件获取的内存。当不再需要文件或将以不同的文件模式打开文件时,使用此函数。
语法如下:
Name_of_file_object.close()可以使用以下代码语法简单地打开和关闭文件:
#Opening and closing a file test.txt:
text_file = open("test.txt","a") text_file.close()通过使用 Python,您可以创建一个文本文件(test.txt。通过使用该代码,可以轻松地写入文本文件。要打开文件进行写入,我们将第二个参数设置为"w",该参数处于访问模式。为了将数据写入这个test.txt文件,我们使用file handle对象的write()方法。创建一个名为text_write.py的脚本,并在其中写入以下内容:
text_file = open("test.txt", "w") text_file.write("Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\n") text_file.close()运行前面的脚本,您将获得如下输出:
现在,检查您当前的工作目录。您将找到我们创建的test.txt文件。现在,检查文件的内容。您会发现我们在write()函数中写入的日期将保存在test.txt中。
在前面的程序中,我们声明了text_file变量以打开名为test.txt的文件。open函数有两个参数:第一,我们要打开的文件,第二,表示我们要对文件执行或应用的权限或操作的访问模式。在我们的程序中,我们在第二个参数中使用了"w"字母,表示write。然后,我们使用**text_file.close()**关闭存储的test.txt文件的实例。
读取文件就像从文件中写入一样简单。为了打开文件进行读取,我们将第二个参数即访问模式设置为"r",而不是"w"。为了从这个文件中读取数据,我们使用了file handle对象的read()方法。创建一个名为text_read.py的脚本,并在其中写入以下内容:
text_file = open("test.txt", "r") data = text_file.read() print(data) text_file.close()输出结果如下:
student@ubuntu:~$ python3 text_read.py Monday Tuesday Wednesday Thursday Friday Saturday在前面的程序中,我们声明了text_file变量以打开名为test.txt的文件。open函数有两个参数:第一,我们要打开的文件,第二,表示我们要对文件执行或应用的权限或操作的访问模式。在我们的程序中,我们在第二个参数中使用了"r"字母,表示一个read操作。然后,我们使用text_file.close()关闭存储的test.txt文件的实例。运行 Python 程序后,我们可以很容易地在终端中看到文本文件中的内容。
在本章中,我们学习了各种文件。我们学习了 PDF、Excel、CSV 和文本文件。我们使用 Python 模块对这些类型的文件执行一些操作。
在下一章中,我们将学习 Python 中的基本网络和 internet 模块。
readline()和readlines()之间有什么区别?open()和with open()之间有什么区别?- 开始时
r c:\\Downloads的意义是什么? - 目标是什么?
pass有什么用?- 什么是 lambda 表达式?
- XLRD:https://xlrd.readthedocs.io/en/latest/api.html
openoyxl:http://www.python-excel.org/- 关于发电机概念:https://wiki.python.org/moin/Generators**************
