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系列教程,python,人工智能,开发语言)