2017-02-17 52 views
0
with open(filename, "r") as f: 
    for line in f: 
     line = (' '.join(line.strip().split())).split() 

任何人都可以分解刪除空格的行嗎? 我明白line.strip()。split()首先從line中刪除前導和尾隨空格,然後將結果字符串拆分爲空格並將所有單詞存儲在列表中。在文件中讀取時刪除空格

但剩下的代碼是做什麼的?

+0

你能給你想擁有的輸入和輸出的例子嗎?你是否試圖從行中刪除所有的空白,或者只是在開始/結束? – Scovetta

+0

我正在閱讀別人寫的代碼,並試圖瞭解這行代碼的作用。輸入是一個包含幾行整數的.dat文件。 – LearningToCode

回答

0

' '.join(line.strip().split())創建一個string,由所有由一個空格字符分隔的列表元素組成。在該字符串上應用split()方法將再次返回一個包含字符串中由空格字符分隔的所有單詞的列表。

+0

感謝您的回覆。它可以只是line.strip()。split()? join和split()再次似乎沒有改變最終結果。 – LearningToCode

+0

是的,代碼大部分是多餘的。 @LearningToCode – Jarvis

0

這裏有一個細目:

# Opens the file 
with open(filename, "r") as f: 
    # Iterates through each line 
    for line in f: 
     # Rewriting this line, below: 
     # line = (' '.join(line.strip().split())).split() 

     # Assuming line was " foo bar quux " 
     stripped_line = line.strip()  # "foo bar quux" 
     parts = stripped_line.split() # ["foo", "bar", "quux"] 
     joined = ' '.join(parts)   # "foo bar quux" 
     parts_again = joined.split()  # ["foo", "bar", "quux"] 

難道這就是你要找的人?

+0

感謝您的回覆。這就是我所問的。在我看來,最後兩個步驟是多餘的。 – LearningToCode

0

這段代碼毫無意義的複雜是它是什麼。

沒有必要strip,如果你無參數split下一個樣品(無參數split滴開頭和結尾的副作用空格),所以line.strip().split()可以簡化爲line.split()

join並重新split不會改變任何事情,join用空格堅持第一split一起回來,然後split這些同樣的空間resplits。所以,你可以節省荷蘭國際集團只splitjoin的時間,只是不停地從第一split的原創性成果,將其更改爲:

line = line.split() 

,它在功能上等同於原:

line = (' '.join(line.strip().split())).split() 

和更快啓動。我猜你所遞交的代碼是由不明白split ing和joinjust threw stuff at their problem without understanding what it did的人編寫的。

+0

謝謝你的解釋。 – LearningToCode

-1

我認爲他們這樣做是爲了保持恆定數量的空白。該條將刪除所有空格(可以是5個空格和一個製表符),然後將它們添加到單個空間中。

+0

Woa。爲什麼downvote –

+0

呃,其中一個,他們加回來的空白在第二個'split'中被刪除,所以沒有空格被「維護」,更不用說「恆定」數量(不管這意味着什麼;剝離的前導和尾隨空格意味着畢竟,甚至空白的運行次數也不會被保留)。 – ShadowRanger

0

這裏是解釋代碼: -

with open(filename, "r") as f: 
    for line in f: 
     line = (' '.join(line.strip().split())).split() 

首先line.strip()除去開頭和結尾,從線和.split()突破空格列出的白色空間的基礎。

再次.join將先前列表轉換爲一行空格分隔。最後.split再次將其轉換爲列表。

此代碼是多餘的line = (' '.join(line.strip().split())).split()。它應該是: -

line = line.split() 

如果要再次使用strip -

line = map(str.strip, line.split()) 
+0

No-arg'split'隱含地'strip's,沒有理由通過'map(str.strip')來運行它,因爲'split'的每個結果都沒有前導或尾隨空白。同樣,'strip'在沒有arg的'split'之前是多餘的。 – ShadowRanger

+0

@ShadowRanger謝謝 –