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