Python:如果len(list)在不同的情况下给出不同的结果?

Python:如果len(list)在不同的情况下给出不同的结果?,python,list,printing,Python,List,Printing,我正在尝试用Python编写一个音乐程序,它将用户编写的一些音乐放在一个文本文件中,并将其转换成midi。在这个阶段,我对python不是特别有经验,所以我不确定这个问题背后的原因是什么。我正在尝试为程序编写源文件解析器,这个过程的一部分是创建一个包含文本文件所有行的列表,并将每行分解为自己的列表,以使它们更易于使用。我成功地做到了这一点,但有一个问题 我希望代码忽略仅为空白的行(这样用户可以使他们的文件至少具有某种可读性,而不需要将所有行一行一行地放在另一行上),但我似乎不知道如何做到这一点。

我正在尝试用Python编写一个音乐程序,它将用户编写的一些音乐放在一个文本文件中,并将其转换成midi。在这个阶段,我对python不是特别有经验,所以我不确定这个问题背后的原因是什么。我正在尝试为程序编写源文件解析器,这个过程的一部分是创建一个包含文本文件所有行的列表,并将每行分解为自己的列表,以使它们更易于使用。我成功地做到了这一点,但有一个问题

我希望代码忽略仅为空白的行(这样用户可以使他们的文件至少具有某种可读性,而不需要将所有行一行一行地放在另一行上),但我似乎不知道如何做到这一点。我试过这么做

with open(path, "r") as infile:
    for row in infile:
        if len(row):
            srclines.append(row.split())
for entry in srclines:
    print entry
这个确实可以创建行列表并分隔每个单词,但它仍然会附加只有空格的空行。。。我这样做证实了这一点

with open(path, "r") as infile:
    for row in infile:
        if len(row):
            srclines.append(row.split())
for entry in srclines:
    print entry
举个例子,它给出了

['This', 'is']
[]
['A', 'test']
原文是

This is

A test
但奇怪的是,如果在打印阶段我做了另一个len()检查,那么空行实际上被忽略了,就像我想要的那样,它看起来是这样的

['This', 'is']
['A', 'test']

这是什么原因?这是否意味着我只能在生成列表后查看列表并删除空条目?还是我只是把行导入代码弄错了?我正在使用Python3.6测试这段代码,顺便说一下,行中包含一个换行符,所以它不是空的。但是
row.split()
找不到任何非空白字符,因此它返回一个空列表

使用

忽略换行符(以及任何其他前导/尾随空格)

或者更简单地说:

if row.strip():
由于空字符串无效。

请尝试创建一个:

输出:

[['This', 'is'], ['A', 'test']]

testdoc.txt有很多空行;但在产出方面,他们是落后的

src = 'testdoc.txt'
with open(src, 'r') as f:
    for r in f:
        if len(r) > 1:
            print(r.strip())

现在,您可以很明显地将所有内容都放在列表中或逐行列表中,而不是打印任何符合您进一步逻辑的内容

如果row.strip():
足够-空字符串也是错误的,无需
len()
them@ThierryLathuille谢谢你告诉我,我将编辑我的answer@ThierryLathuille现在我的答案仍然是使用列表理解,但它不包含
None
,因为我没有使用那些返回
None
的列表函数,即append、reverse等。这样做更好,但仍然存在一个问题:OP想要忽略只有空格的行,如果其中一行是“
”\n“
,请看我的答案,您将得到与他相同的空列表