簡體   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