[英]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.