繁体   English   中英

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

[英]Python: if len(list) giving different results in different circumstances?

我试图用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

例如,

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

原文为

This is

A test

但是奇怪的是,如果在打印阶段我再次执行len()检查,那么空行实际上就像我想要的那样被忽略了 ,看起来像这样

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

这是什么原因? 这是否意味着我只能在生成列表后浏览列表并删除空条目? 还是我只是在输入错误的行代码? 我正在使用python 3.6来测试此代码

row包含换行符,因此它不是空的。 但是row.split()找不到任何非空白字符,因此它返回一个空列表。

采用

if len(row.strip()):

忽略换行符(以及任何其他前导/后跟空格)。

或更简单地说:

if row.strip():

因为空字符串是虚假的。

尝试创建列表理解

with open('d.txt', "r") as infile:
    print([i.strip().split() for i in infile if i.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())

现在,您显然可以将所有内容放入列表或逐行列出,而不用打印适合您进一步逻辑的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM