当前位置: 首页 > 面试题库 >

在Python中读取文件时忽略空行的最简单方法

越英韶
2023-03-14
问题内容

我有一些代码可以读取名称文件并创建列表:

names_list = open("names", "r").read().splitlines()

每个名称用换行符分隔,如下所示:

Allman
Atkinson

Behlendorf

我想忽略仅包含空格的任何行。我知道我可以通过以下方式来实现:创建一个循环并检查读取的每一行,然后将其添加到列表(如果不是空白的话)。

我只是想知道是否还有更Pythonic的方法?


问题答案:

我将堆栈生成器表达式:

with open(filename) as f_in:
    lines = (line.rstrip() for line in f_in) # All lines including the blank ones
    lines = (line for line in lines if line) # Non-blank lines

现在,lines是所有非空白行。这将使您不必在线路上两次打电话。如果需要行列表,则可以执行以下操作:

with open(filename) as f_in:
    lines = (line.rstrip() for line in f_in) 
    lines = list(line for line in lines if line) # Non-blank lines in a list

您也可以采用单行代码(排除with语句)来执行此操作,但是它不再高效且更难阅读:

with open(filename) as f_in:
    lines = list(line for line in (l.strip() for l in f_in) if line)

更新:

我同意,由于令牌的重复,这很丑陋。您可以根据需要编写一个生成器:

def nonblank_lines(f):
    for l in f:
        line = l.rstrip()
        if line:
            yield line

然后像这样调用它:

with open(filename) as f_in:
    for line in nonblank_lines(f_in):
        # Stuff

更新2:

with open(filename) as f_in:
    lines = filter(None, (line.rstrip() for line in f_in))

以及在CPython上(具有确定性引用计数)

lines = filter(None, (line.rstrip() for line in open(filename)))

itertools.ifilter如果需要生成器,请在Python 2中使用;如果需要列表,请在Python 3list中使用。



 类似资料:
  • 问题内容: 我有一些代码可以从文件中读取行,我想识别行何时开始或fisrt字符(非空白)为’ ‘并忽略它,因此在while语句中添加如下内容 我有类似的东西: 如何完成代码? 问题答案:

  • 问题内容: 在Python中,我刚刚阅读了一个文本文件中的一行,并且我想知道如何编写代码以忽略该行开头带有#的注释。 我认为应该是这样的: 但是我是Python的新手,我不知道语法 问题答案: 您可以使用startswith() 例如

  • 问题内容: 我有一个很大的文件4GB,当我尝试读取它时,我的计算机挂起了。因此,我想逐个读取它,并且在处理完每个块之后,将已处理的块存储到另一个文件中并读取下一个块。 这些零件有什么方法吗? 我很想有一个简单的方法。 问题答案: 要编写一个简单函数,只需使用: 另一个选择是使用和辅助功能: 如果文件是基于行的,则文件对象已经是行的惰性生成器:

  • 本文向大家介绍python简单读取大文件的方法,包括了python简单读取大文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python简单读取大文件的方法。分享给大家供大家参考,具体如下: Python读取大文件(GB级别)采用的办法很简单: 例如: 一切都交给python解释器处理,读取效率很高,且占用资源少。 stackoverflow参考链接:How to read la

  • 本文向大家介绍Python按行读取文件的简单实现方法,包括了Python按行读取文件的简单实现方法的使用技巧和注意事项,需要的朋友参考一下 1:readline() 一行一行得从文件读数据,显然比较慢; 不过很省内存; 测试读10M的sample.txt文件,每秒大约读32000行; 2:fileinput 写法简单一些,不过测试以后发现每秒只能读13000行数据,效率比上一种方法慢了两倍多; 3

  • 问题内容: 我有一个问题,当java应用程序读取Excel文件.xlsx扩展名时,该应用程序正常工作,但是在工作簿中有很多工作表,其中1、2个工作表正确读取,但是当读取3个工作表时,没有读取所有单元格当我打开并从Excel文件中检查时,单元格存在空值,但是当apache poi读取该单元格时,该单元格将被忽略。原因是什么? 更新资料 在读取excel文件上方,虽然我在一行中检查了Excel文件20