Python学习笔记:输入与输出

学习Excel技术,关注微信公众号:

excelperfect

可以将数据信息输入到Python中,也可以从Python中输出数据。通常,导入数据的方法取决于想要输入或输出的数据的格式。

在Python终端中实现输入/输出

一般使用print函数将信息输出到终端,例如:

图1

通过连接字符串来输出文本:

图2

可以使用input函数要求用户从终端输入值,其格式为x = input(),其中x是一个字符串对象,包含用户输入到终端的文本。例如:

图3

注意,从input函数返回的数据总是一个字符串:

图4

因此,当输入是数字时,要将其在数值计算中使用,则需要将其转换为数字类型。

图5

使用Python打开和关闭文件

在Python中,基本的输入输出可以使用内置的open及其相关对象。将相对于系统工作目录的文件的路径名提供给open函数,返回一个对象,该对象的方法允许读取和写入给定文件。

open函数调用具有以下格式:

open(path, mode,...)

其中:

  • path:一个字符串,表示想要打开的文件的路径。
  • mode:想要对文件执行的操作,选项如下:“r”——读取文件,默认设置;“w”——写入文件,如果不存在则创建文件,如果存在则删除;“a”——写入到文件末尾,如果不存在则创建文件;“r+”——读取和写入文件,起始位置位于文件开头;“w+”——读取和写入文件,如果已存在则删除文件,起始位置位于文件开头;“a+”——读取和写入文件,起始位置位于文件末尾;“t”——以文本读取或写入数据,此选项可与前面列出的选项一起使用(例如“r+t”),默认选项;“b”——以二进制读取或写入数据,此选项可与前面列出的选项一起使用(例如“r+b”)。
  • …:open函数调用中的些其他不常用的选项。

open函数的输出是一个open对象,将其赋值给一个变量:

obj= open(文件名)

在文件处于打开状态时,其他程序不被允许访问该文件。完成对文件执行所需的任何操作后,可以使用obj.close()方法关闭文件,其中obj是打开的对象。关闭文件后,将允许其他程序对其进行访问。

图6

使用Python手动读取和写入文件

可以使用read方法以字符串形式返回文件完整的内容:

图7

注意,read方法返回文本文件的全部内容。对于大型文本文件,会占用大量内存。因此,除非文件比较小,否则应避免使用read方法。

open对象的readline方法与read方法类似,但是它只返回直到下一个新行字符的字符串。使用readline方法的open对象是遍历文件的迭代器,这意味着每个后续调用都将返回文件中的下一行。我们可以通过在迭代器上创建一个for循环来重现使用read方法创建的字符串。

图8

这个方法的好处是,可以让我们选择每行迭代时保留的数据,以及在for循环中执行其他操作。

使用obj.write(string)方法将字符串写入文件,其中string是希望写入的字符串对象,obj是open对象。

图9

再添加write语句将继续在文件中追加字符串:

图10

Python上下文管理器:with语句

Python的上下文管理器通常提供可以将其视为执行代码的“子环境”。Python还有其他方法来处理在上下文管理器中引发的异常。with语句允许对象的特殊实例化,其中在实例化对象时执行__enter__方法中定义的任何内容,并且在退出with语句时执行__exit__方法中定义的任何内容。最重要的是,无论是否引发异常,都会执行这些方法。open对象在其__exit__方法中包含close方法,因此如果引发任何异常,Python将干净地关闭文件并退出。

with语句的格式:

with[对象] as [变量]:

[执行]

与for循环和if语句一样,缩进的[执行]部分中定义的任何内容都将在[对象]实例化为变量[变量]的情况下执行。如果没有引发异常,则在缩进部分执行完成后将执行__exit__方法。

使用with语句实现的简单的文件输入/输出:

图11

可以看到,不需要使用close方法,并且在引发异常时会受到保护。

Python csv模块

到目前为止,我们已经从文件中读取每行作为自己的字符串,但是如何访问这些行中的信息呢?一种方法是使用with open方法读取数据,并使用split方法分离数据。split方法的格式为[string].split([delimiter]),其中[delimiter]是分隔符,[string]是想要拆分的字符串。输出将是由分隔符分隔的字符串列表。

图12

导入表数据更好的方法是使用csv模块。csv模块主要用于读取逗号分隔值(CSV)文件,但是它可以更普遍地用于导入任何分隔符类型的数据文件。使用csv模块进行读写的过程类似于在open对象上进行迭代。

下面的介绍中,我们使用sample.csv文件示例数据,其内容如下:

图13

使用csv模块从sample.csv中读取数据。

可以使用reader函数来读取数据,其格式为:

[object]= csv.reader([openobj], delimiter=[delimiter], …)

其中:

  • [object]是一个新的csv.reader对象
  • [openobj]是一个open对象
  • [delimiter]是分隔符或分隔值,默认情况下使用“,”
  • …代表其他选项,在此不作介绍

在使用csv函数时,需要在open语句中添加选项newline = ””,以防止在程序使用换行符的不同变体的情况下可能会添加额外的换行符。

下面的代码读取sample.csv文件:

图14

下面使用csv模块向文件中写入字符串。

编写一个列表,其元素包含要用作行的列表,每个列表包含要用作列的字符串列表,可以轻松使用writer函数。writer函数创建一个类似于reader对象的对象,但其方法将带有分隔符的数据写入给定的open文件对象。

writerows([object],delimiter = [delimiter])将像列表一样接受一些可迭代对象[object],并使用[delimiter]分隔符将它们写入给定文件。默认分隔符也是“,”。

同样,在使用csv函数时,需要在open语句中添加选项newline = ””,以防止在程序使用换行符的不同变体的情况下可能会添加额外的换行符。

下面的代码从sample.csv中读取数据,然后将数据写入新的文件sample2.csv:

图15

示例

下面的代码计算每名学生的总分,并更新文件:

图16

原文发布于微信公众号 - 完美Excel(excelperfect)

原文发表时间:2019-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券