`
lovebirdegg
  • 浏览: 175424 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

读取、写入和 Python

阅读更多

 

读取、写入和 Python

在 “探索 Python ” 系列以前的文章中,学习了基本的 Python 数据类型和一些容器数据类型,例如  tuplestring    list 。其他文章讨论了 Python 语言的条件和循环特性,以及它们如何与容器数据类型进行协作来简化编程任务。编写程序的最后一个基本步骤就是从文件读取数据和把数据写入文件。阅读完这篇文章之后,可以在自己的 to-do 列表中加上检验这个技能学习效果的任务。

简单输出

贯穿整个系列,一直用  print   语句写入(输出)数据,它默认把表达式作为  string   写到屏幕上(或控制台窗口上)。清单 1 演示了这一点。清单 1 重复了第一个 Python 程序 “Hello, World!”,但是做了一些小的调整。


清单 1. 简单输出

>>> print "Hello World!"Hello World!>>> print "The total value is = $", 40.0*45.50The total value is = $ 1820.0>>> print "The total value = $%6.2f" % (40.0*45.50)The total value = $1820.00>>> myfile = file("testit.txt", 'w')>>> print >> myfile, "Hello World!">>> print >> myfile, "The total value = $%6.2f" % (40.0*45.50)>>> myfile.close()

 

正如这个示例演示的,用  print   语句写入数据很容易。首先,示例输出一个简单的  string 。然后创建并输出复合的  string ,这个字符串是用  string   格式化技术创建的。

但是,在这之后,事情发生了变化,与代码以前的版本不同。接下来的一行创建  file   对象,传递进名称  "testit.txt"    'w'   字符(写入文件)。然后使用修改过的  print   语句 —— 两个大于号后边跟着容纳  file   对象的变量 —— 写入相同的  string 。但是这一次,数据不是在屏幕上显示。很自然的问题是:数据去哪儿了?而且,这个  file   对象是什么?

第一个问题很容易回答。请查找 testit.txt 文件,并像下面那样显示它的内容。

% more testit.txt Hello World!The total value = $1820.00

 

可以看到,数据被准确地写入文件,就像以前写到屏幕上一样。

现在,请注意清单 1 中的最后一行,它调用  file   对象的  close   方法。在 Python 程序中这很重要,因为在默认情况下,文件输入和输出是缓冲的 ;在调用  print   语句时,数据实际未被写入;相反,数据是成批写入的。让 Python 把数据写入文件的最简单方式就是显式地调用  close   方法。

文件对象

file   是与计算机上的文件进行交互的基本机制。可以用  file   对象读取数据、写入数据或把数据添加到文件,以及处理二进制或文本数据。

学习  file   对象的最简单方法就是阅读帮助,如清单 2 所示。


清单 2. 得到 file 对象的帮助

>>> help(file)Help on class file in module __builtin__:class file(object) |  file(name[, mode[, buffering]]) -> file object |   |  Open a file.  The mode can be 'r', 'w' or 'a' for reading (default), |  writing or appending.  The file will be created if it doesn't exist |  when opened for writing or appending; it will be truncated when |  opened for writing.  Add a 'b' to the mode for binary files. |  Add a '+' to the mode to allow simultaneous reading and writing. |  If the buffering argument is given, 0 means unbuffered, 1 means line |  buffered, and larger numbers specify the buffer size. |  Add a 'U' to mode to open the file for input with universal newline |  support.  Any line ending in the input file will be seen as a '\n' |  in Python.  Also, a file so opened gains the attribute 'newlines'; |  the value for this attribute is one of None (no newline read yet), |  '\r', '\n', '\r\n' or a tuple containing all the newline types seen. |   |  'U' cannot be combined with 'w' or '+' mode. |   |  Note:  open() is an alias for file(). |   |  Methods defined here:...

 

正如帮助工具指出的,使用  file   对象很简单。用  file   构造函数或  open   方法创建  file   对象,open 是  file   构造函数的别名。第二个参数是可选的,它指定文件的使用方式:

  • 'r'   (默认值)表示从文件读取数据。
  • 'w'   表示要向文件写入数据,并截断以前的内容。
  • 'a'   表示要向文件写入数据,但是添加到当前内容尾部。
  • 'r+'   表示对文件进行读写操作(删除以前的所有数据)。
  • 'r+a'   表示对文件进行读写操作(添加到当前内容尾部)。
  • 'b'   表示要读写二进制数据。

这篇文章的第一个代码清单向文件写入数据。现在,清单 3 显示如何把这个数据读入 Python 程序,并解析文件的内容。


清单 3. 从文件读取数据

>>> myfile = open("testit.txt")>>> myfile.read()'Hello World!\nThe total value = $1820.00\n'>>> str = myfile.read()>>> print str>>> myfile.seek(0)>>> str = myfile.read()>>> print strHello World!The total value = $1820.00>>> str.split()['Hello', 'World!', 'The', 'total', 'value', '=', '$1820.00']>>> str.split('\n')['Hello World!', 'The total value = $1820.00', '']>>> for line in str.split('\n'):...     print line... Hello World!The total value = $1820.00>>> myfile.close()

 

要读取数据,首先要创建合适的  file   对象 —— 在这个示例中,文件对象打开 testit.txt 文件,并用  read   方法读取内容。这个方法把整个文件读入一个  string ,然后在程序中把这个字符串输出到控制台。在对  read   方法的第二个调用中,试图把值分配给  str   变量,结果返回一个空的  string 。这是因为第一个 read 操作读入了整个文件。当试图再次读取内容时,已经到了文件末尾,所以什么也读不到。

这个问题的解决方案也很简单:让  file   对象返回文件的开头。回到开头要通过  seek   方法进行,它接受一个参数,表示要从文件中的什么位置开始读取或写入(例如,0 代表文件开头)。seek   方法支持更复杂的操作,但是可能会有危险。对于目前来说,我们还坚持采用简单方式。

现在回到了文件的开始之处,可以把文件内容读入  string   变量并对  string   做适当地解析。请注意,在文件中,行之间用新行(或行结束)字符区分。如果试着在  string   上调用  split   方法,它会在空白字符(例如空格)处进行拆分。为了让方法根据新行字符拆分各行,必须显式地指定新行字符。然后可以拆分  string   并在  for   循环中对文件的行进行迭代。

看起来仅仅从文件中读取和处理一行内容都有许多工作要做。Python 要让简单的事情变容易,所以您可能想知道这个任务有没有快捷方式可用。如清单 4 所示,答案是 yes。


清单 4. 读取和解析行

>>> myfile = open("testit.txt")>>> for line in myfile.readlines():...     print line... Hello World!The total value = $1820.00>>> myfile.close()>>> for line in open("testit.txt").readlines():...     print line... Hello World!The total value = $1820.00>>> for line in open("testit.txt"):...     print line... Hello World!The total value = $1820.00

 

清单 4 演示了读取和解析文本文件行的三种技术。首先,打开文件并把它分配给变量。然后调用  readlines   方法,把整个文件读入内存并把内容拆分成  string   列表。for   循环在  string   列表上进行迭代,一次输出一行。

第二个  for   循环通过使用  file   对象的隐式变量(也就是说,变量不是显式创建的),对这个过程稍做了点儿简化。打开文件和读取文件内容一次完成,生成的效果与第一个显式示例相同。最后一个示例进一步做了简化,并演示了直接在  file   对象上进行迭代的能力(请注意,这是 Python 的一个新特性,所以在您的计算机上可能无法工作)。在这个示例中,创建隐式  file   对象,然后 Python 做余下的工作,允许对文件中的全部行进行迭代。

但是,有些时候,在从文件读取数据时,可能想要更好的控制级别。在这种情况下,应当使用  readline   方法,如清单 5 所示。


清单 5. 读取数据

>>> myfile = open("testit.txt")>>> myfile.readline()'Hello World!\n'>>> myfile.readline()'The total value = $1820.00\n'>>> myfile.readline()''>>> myfile.seek(0)>>> myfile.readline()'Hello World!\n'>>> myfile.tell()13L>>> myfile.readline()'The total value = $1820.00\n'>>> myfile.tell()40L>>> myfile.readline()''>>> myfile.tell()40L>>> myfile.seek(0)>>> myfile.read(17)'Hello World!\nThe '>>> myfile.seek(0)>>> myfile.readlines(23)['Hello World!\n', 'The total value = $1820.00\n']>>> myfile.close()

 

这个示例演示了如何在文件中移动,一次读取一行,或者显式地用  seek   方法移动文件位置指示器。首先,用  readline   方法在文件行中移动。当到达文件末尾时,readline   方法返回一个空的  string 。在过了文件末尾之后,如果还用这种方式继续读取,并不会造成错误,只会返回空的  string

然后返回文件开始的地方,并读取另一行。  tell   方法显示出在文件中的当前位置(应当在第一行文本之后) —— 在这个示例中,在第 13 个字符位置。通过使用这个知识,可以向  read  readline   方法传递一个参数,控制读取的字符数。对于  read   方法,这个参数(在这个示例中是 17)是要从文件中读取的字符数。但是  readline   方法在读入指定数量的字符后,还会继续读取,直到行尾。在这个示例中,它读取第一行和第二行文本。

写入数据

迄今为止的示例都侧重于读取数据,而不是写入数据。但是如清单 6 所示,一旦了解了使用  file   对象的基础知识,写入也很容易。


清单 6. 写入数据

  >>> mydata = ['Hello World!', 'The total value = $1820.00']>>> myfile = open('testit.txt', 'w')>>> for line in mydata:...     myfile.write(line + '\n')... >>> myfile.close()>>> myfile = open("testit.txt")>>> myfile.read()'Hello World!\nThe total value = $1820.00\n'>>> myfile.close()>>> myfile = open("testit.txt", "r+")>>> for line in mydata:...     myfile.write(line + '\n')... >>> myfile.seek(0)>>> myfile.read()'Hello World!\nThe total value = $1820.00\n'>>> myfile.close()>>> myfile = open("testit.txt", "r+a")>>> myfile.read()'Hello World!\nThe total value = $1820.00\n'>>> for line in mydata:...     myfile.write(line + '\n')... >>> myfile.seek(0)>>> myfile.read()'Hello World!\nThe total value = $1820.00\nHello World!\nThe total value = $1820.00\n'>>> myfile.close()

 

要把数据写入文件,必须先创建  file   对象。但是,在这情况下,必须用  'w'   模式标记指定要写入文件。在这个示例中,把  mydata list   的内容写入文件,关闭文件,然后重新打开文件,这样就可以读取内容了。

但是,通常情况下,想要同时读取文件和写入文件,所以这个示例的下一部分用  'r+'   模式重新打开文件。因为能够写入文件,而不是添加,所以文件会被截断。首先,把  mydata list   的内容写入文件,然后把文件指针重新定位到文件开头,并读入内容。然后这个示例关闭文件,并用读取和添加模式  "r+a"   重新打开文件。正如示例代码所示,文件内容现在是两个写入操作的结果(文本是重复的)。

处理二进制数据

前面所有的示例都处理文本数据或字符数据:写入和读取字符  string 。但是,在某些情况下,例如在处理整数或压缩文件时,需要能够读取和写入二进制数据。在创建  file   对象时,通过把  'b'   添加到文件模式中,可以很容易地用 Python 处理二进制数据,如清单 7 所示。


清单 7. 处理二进制数据

>>> myfile = open("testit.txt", "wb")>>> for c in range(50, 70):...     myfile.write(chr(c))... >>> myfile.close()>>> myfile = open("testit.txt")>>> myfile.read()'23456789:;<=>?@ABCDE'>>> myfile.close()

 

在这个示例中,创建一个合适的  file   对象,然后用从 50 到 69 的 ASCII 值写入二进制字符。使用  chr   方法,把  range   方法调用创建的整数转变成字符。在写完所有数据之后,关闭文件并重新打开文件进行读取,还是使用二进制模式标记。读取文件可以证明没有把整数写入文件,相反,写的是字符值。

在读取和写入二进制数据时,必须小心,因为不同的平台用不同的方式保存二进制数据。如果必须处理二进制数据,最好是使用来自 Python 库的合适对象(或者来自第三方开发人员的对象)。

回页首

读取和写入:最有趣的地方

这篇文章讨论了在 Python 程序中如何从文件读取数据和写入数据到文件中。总体来说,过程很简单:创建合适的  file   对象,然后按照需要读取和写入。但是,在使用写入模式创建  file   文件,向文件写入数据时,必须注意文件的截断。如果需要向文件中添加数据,应当在创建  file   对象时,使用添加模式。

分享到:
评论

相关推荐

    python3 循环读取excel文件并写入json操作

    在Python编程中,有时我们需要处理大量...以上就是关于Python3如何循环读取Excel文件并写入JSON的操作,以及如何处理MySQL数据库中的时间参数和Excel文件的写入技巧。这些技能在数据处理和自动化任务中是至关重要的。

    python读取Excel并写入.zip

    Python提供了多个库来实现Excel文件的读取与写入,其中最常用的是`pandas`库和`openpyxl`库。这里我们将重点讨论如何使用这两个库进行Excel文件的操作。 首先,让我们了解`pandas`库。`pandas`是Python中一个强大的...

    excel_python写入excel_python读取EXCEL_pythonexcel_

    本篇文章将详细介绍如何使用Python进行Excel文件的读取和写入操作。 首先,我们要引入必要的库。`pandas`库是处理数据的强大工具,它提供了便捷的方法来读取和写入Excel文件;而`openpyxl`库则用于更复杂的工作,如...

    Python-openpyxl表格读取写入的案例详解

    xlxd、xlwt、–只能读取,openpyxl、可以读取写入 2.安装 pip install -i https://pypi.douban.com/simple openpyxl==2.6.2 3.处理对象 openpyxl只能处理xlsx格式的excel文件,只能使用办公软件来创建xlsx格式的...

    笔记1-python读取和写入文档

    详细介绍了python对文档内容的读取和写入操作,基于python3.6.5和pycharm编写。步骤详细

    python读取yaml文件后修改写入本地实例

    在本文中,我们将探讨如何使用Python的`ruamel.yaml`库来读取、修改并写入YAML文件。 首先,我们需要安装`ruamel.yaml`库,这是Python中处理YAML文件的一个强大工具,支持保留原始格式和注释,非常适合进行修改后再...

    python读取和写入文本文件.pdf

    Python读取和写入文本文件 Python 语言中读取和写入文本文件是一种非常基本的操作。文本文件是最简单的一种文件格式,它的文件扩展名通常是 .txt。Python 提供了多种函数来写数据到文件中或从文件中读取数据。 ...

    python 实现 pdf 书签读取、批量写入源码

    本篇将详细介绍如何利用Python来实现PDF书签的读取和批量写入。 首先,让我们了解PDF书签。PDF书签是一种方便用户导航的工具,类似于电子书或网页的目录。它们是PDF文档的结构化元素,用于快速跳转到特定页面或章节...

    Python文件操作全攻略:读取与写入技巧详解

    文件操作是编程中的一项基本技能,Python提供了简单易用的内置函数来处理文件的读取和写入。无论是处理文本数据、配置文件还是二进制数据,Python都能提供高效的解决方案。本文将详细介绍如何在Python中读取和写入...

    python读取las数据.zip

    2. **pylas库**:与laspy类似,`pylas`提供了一个简洁的API来读取和写入LAS文件。它基于`laspy`,但提供了更现代的接口和额外的功能,如内置的统计函数和转换到其他格式的能力。 3. **kd树和最近邻搜索**:在处理...

    少儿编程python实现excel文件读取和写入

    【少儿编程】python实现excel文件读取和写入,实现对excel文件的快速读取和写入操作

    python多线程同步之文件读写控制

    这会导致并发问题,如输出所示,数据被错误地读取和写入,因为多个线程可能同时访问文件,导致数据混乱。 为了修复这个问题,我们需要引入线程同步机制。在2.2部分,我们可以看到通过使用`threading.Lock()`对象...

    利用Python中的输入和输出功能进行读取和写入的教程

    本教程主要介绍了Python编程语言中文件输入输出的基本方法,包括如何读取和写入文件。作为IBM官方网站技术文档的一部分,它为希望学习Python文件操作的读者提供了宝贵的资源。 知识点一:简单输出 在Python中,输出...

    Python脚本文件操作全指南:读取、写入与修改

    Python脚本在文件操作方面的能力非常强大,它提供了丰富的内置函数和模块来处理文件的读取、写入、修改和其他相关操作。无论是处理文本文件、二进制文件还是进行高级文件操作,Python都能提供简洁而高效的方法。本文...

    Python读取txt内容写入xls格式excel中的方法

    尤其是当需要读取和写入不同格式的文件时,Python提供了大量方便的库来完成这些任务。本文将介绍如何使用Python来读取文本文件(txt格式)的内容,并将其写入到Excel文件(xls格式)中。本文的知识点包括Python的...

    读取word内容写入excel

    python脚本,实现从word中读取数据块,写入到excel表格中

    Python中文件的读取和写入操作

    Python中的文件操作是编程过程中常见的任务,包括文件的读取和写入。本文将详细讲解如何在Python中进行这些操作,特别是针对文本文件。 首先,读取整个文件是最基本的文件操作之一。在Python中,你可以使用`open()`...

    python读取Android apk 包名,权限,以及读取 ios IPA bid,权限. 上传文件,将权限写入excel 表格

    python读取Android apk 包名,权限,以及读取 ios IPA bid,权限. 上传文件,将权限写入excel 表格,有能力的大佬可以再优化,做成反编译工具,或者我自己有时间了再自己优化添加一些功能。

    shapefile.rar_python 地理_python读取shp_python读取shp文件_shp_读取shp

    它提供了一个简单的API来读取和写入Shapefile文件。读取Shapefile的基本步骤如下: ```python from shapefile import Reader with Reader('path_to_your_shapefile.shp') as shp: # 访问属性表 for record in ...

    将Python列表内容写入JSON文件并存储的两种方法

    你可以通过读取这个文件,使用`json.load()`函数将其内容还原为Python列表,以便进一步处理或分析。 总结,Python提供了简单易用的接口来处理JSON数据。不论是通过`json.dumps()`和`write_file()`组合,还是直接...

Global site tag (gtag.js) - Google Analytics