我正在尝试用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来测试这段代码
答案 0 :(得分:1)
row
包含换行符,因此它不是空的。但row.split()
找不到任何非空白字符,因此返回一个空列表。
使用
if len(row.strip()):
忽略换行符(以及任何其他前导/尾随空格)。
或更简单:
if row.strip():
因为空字符串是假的。
答案 1 :(得分:0)
尝试创建list comprehension:
with open('d.txt', "r") as infile:
print([i.strip().split() for i in infile if i.strip()])
输出:
[['This', 'is'], ['A', 'test']]
答案 2 :(得分:0)
testdoc.txt有很多空行;但在输出中它们已经出局;
src = 'testdoc.txt'
with open(src, 'r') as f:
for r in f:
if len(r) > 1:
print(r.strip())
现在你可以将这些全部列入列表或列表中,而不是打印任何符合你的进一步逻辑的