百木园-与人分享,
就是让自己快乐。

第九章:文件(1)---打开和操作文件

打开文件:

  为了打开一个文件,程序会调用内置open函数,首先是外部名,接着是处理模式。处理模式典型地用字符串’r’代表为输入打开文件(默认值),\'w’代表为输出生成并打开文件,\'a’代表为在文件尾部追加内容而打开文件。处理模式参数也可以指定为其他选型:

  • 在模式字符串尾部加上b可以进行二进制数据处理(行末转换和Python 3.0 Unicode编码被关闭了)。
  • 加上‘+’意味着同时为输入和输出打开文件(也就是说,我们可以对相同文件对象进行读写,往往与对文件中的修改的查找操作配合使用)。

  要打开的两个参数必须都是Python的字符串,第三个是可选参数,它能够用来控制输出缓存:传入“0”意味着输出无缓存(写入方法调用时立即传给外部文件)。外部文件名参量可能包含平台特定的以及绝对或相对目录路径前缀,没有目录路径时,文件嘉定存在当前的工作目录中(也就是脚本运行的地方)。

使用文件

  一旦存在一个文件对象,就可以调用其他方法来读写相关的外部文件。在任何情况下Python程序中得文本文件都采用字符串的形式。读取文件时会返回字符串形式的文本,文本作为字符串传递给write方法。

文件迭代器是最好的读取行工具
  虽然表中的读写方法都是常用的,但是要记住,现在从文本文件读取文字行的最佳方式是根本不要读取该文件。文件也有个迭代器会自动地在for循环、列表解析或者其他迭代语句中对文件进行逐行读取。

内容是字符串,不是对象
  注意从文件读取的数据回到脚本时是一个字符串。所以如果字符串不是你所需的。就得将其转换为其他类型的Python对象。同样,与print语句不同的是,当你把数据写入文件时,Python不会自动把对象转换为字符串-你必须传递一个已知格式化的字符串。一次你,我们之前见过的处理文件时可以来回转换字符串和数字的工具迟早会派上用场(例如,int、float、str以及字符串格式表格式)。Python也包括一些高级标准库,它用来处理一些对象的存储(例如,pickle模块)以及处理文件中打包的二进制数据(例如,struct木块模块)。

close是通常选项
  调用文件close方法将会终止对外部文件的连接。在Python中,一旦对象不再被引用,则这个对象的内部空间就会自动被收回。当文件对象被收回的时候,如果需要的话,Python也会自动关闭该对象。着意味着你不需要总是手动去关闭文件,尤其是对于不会运行很长时间的简单脚本。另一方面,手动关闭调用没有任何坏处,而且在大型程序中通常是个很不错的习惯。此外,严格地讲,文件的这个集合完成后自动关闭的特性不是语言定义的一部分,而且可能随时间而改变。而且,手动进行文件close方法调用时我们需要养成的一个好习惯。

文件时缓冲的并且是可查找的
  前面一段关于关闭文件的提示很重要,因为关闭既释放了操作系统资源也清空了缓冲区。默认情况下,输出文件总是缓冲的,这意味着写入的文本可能不会立即自动从内存转换到硬盘-关闭一个文件,或者运行其flush方法,迫使缓存的数据进入硬盘。可以用额外的open参数来避免缓存,但是,这可能会影响到性能。Python文件也是在字节偏移的基础上随机访问的,它们的seek方法允许脚本跳转到指定的位置读取或写入。

实际应用中的文件

myfile = open(r\'d:\\spam\',\'w\')
//写入方法不会为我们添加行中支付,所以程序必须包含它来严格地终止行(否则,下次写入时会简单地延长文件的当前行)。
myfile.write(\'hello text file\\n\')			//在Python3.0中write会返回写入的字符数。
myfile.write(\'goodbye text file\\n\')
myfile.close()
myfile = open(r\'D:\\spam\')
myfile.readline()
myfile.readline()

如果想要显示带有末行字符解释的文件内容,用文件对象的read方法把整个文件读入到一个字符串中,并打印它:

open(r\'D:\\spam\').read()
print(open(r\'D:\\spam\').read())

如果想要一行一行地扫描一个文本文件,文件迭代器往往是最佳选择:

for line in open(r\'D:\\spam\'):
    print(line,end=\'\')

来源:https://blog.csdn.net/weixin_40423516/article/details/123418400
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 第九章:文件(1)---打开和操作文件

相关推荐

  • 暂无文章