python系列教程161——文件上的列表解析

Posted 人工智能AI技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python系列教程161——文件上的列表解析相关的知识,希望对你有一定的参考价值。

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

让我们来看看在文件上使用列表解析。

还记得,文件对象有一个readlines方法,它能一次性地把文件载入到行字符串的一个列表中:

>>>f = open('script1.py')

>>>lines = f.readlines()

>>>lines

['import sys\\n','print(sys.path)\\n','x = 2\\n','print(2 ** 33)\\n']

结果中的行在末尾都包含了一个换行符号(\\n)。对于很多程序来说,换行符号很讨厌,我们必须小心避免打印的时候留下双倍的空白,等等。

如下的代码通过对列表中的每一行运行rstrip方法,来移除右端的空白:

>>>lines = [line.rstrip() for line in lines]

>>>lines

['import sys','print(sys.path)','x = 2','print(2 ** 33)']

由于列表解析像for循环语句一样是一个迭代环境,我们甚至不必提前打开文件。它将会调用文件的next方法,每次从文件读取一行:

>>>lines = [line.rstrip() for line in open('script1.py')]

>>>lines

['import sys','print(sys.path)','x = 2','print(2 ** 33)']

这一操作的是一种高效率的方式:因为大多数工作在Python解释器内部完成,这可能比等价的语句要快很多。再次,特别是对于较大的文件,列表解析的速度优势可能很显著。

除了其高效性,列表解析的表现力也很强。我们可以在迭代时在一个文件的行上运行任何的字符串操作:

>>>[line.upper() for line in open('script1.py')]

['IMPORT SYS\\n','PRINT(SYS.PATH)\\n','X = 2\\n','PRINT(2 ** 33)\\n']


>>>[line.rstrip().upper() for line in open('script1.py')]

['IMPORT SYS','PRINT(SYS.PATH)','X = 2','PRINT(2 ** 33)']


>>>[line.split() for line in open('script1.py')]

[['import','sys'],['print(sys.path)'],['x','=','2'],['print(2','**','33)']]


>>>[line.replace(' ','!') for line in open('script1.py')]

['import!sys\\n','print(sys.path)\\n','x!=!2\\n','print(2!**!33)\\n']


>>>[('sys' in line,line[0]) for line in open('script1.py')]

[(True,'i'),(True,'p'),(False,'x'),(False,'p')]

以上是关于python系列教程161——文件上的列表解析的主要内容,如果未能解决你的问题,请参考以下文章

python系列教程162——更复杂的列表解析

9. python 入门教程快速复习,序列,数值类型,字符串方法,列表集合字典方法,文件操作,解析式

Android教程2020 - RecyclerView使用入门

如何将托管在 GitHub 上的 JavaScript 数组解析为 Python 列表?

Python 系列教程 Python的“苦力” ——列表

python系列教程153——循环修改列表