朋友们,如需转载请标明出处: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')]