2012-07-25 39 views
0

就拿短文件包含這些行:的Python:確定缺少

Apple = 1 
Pear = 1 
Orange = 2 
; 
Orange = 3 
Pear = 1 
; 
Apple = 1 
Pear = 1 
Orange = 1 

我做什麼的ReadLine文本文件,並把AppleOrangePear到各自的列表,如:

Orange = [ 2,3,1 ] 
Pear = [ 1,1,1 ] 

我以前line.count('Apple')==1,以確定在文本文件中的當前行是一個水果,然後=到列表後追加值。

如您所見,第二部分缺少Apple。我想要列表是:

Apple = [ 1,'-',1] 

每當行不顯示水果,清單應追加-,以表明它。

我的問題是,我該怎麼做,即。以確定某個部分缺少水果名稱,然後將-添加到該部分。

+0

'蘋果= [1, - , - 1]'無效蟒。我假設你打算使用字符串。 – jamylak 2012-07-25 06:05:27

+0

雅在字符串中。抱歉。 – 2012-07-25 06:05:56

+0

@Tadeck我不知道如何確定文本文件中缺失的水果線。我有一些使用「;」的想法在每節的結尾處,讓Python知道如果在該節的最後,水果名稱沒有被追加到列表中,那麼在它後面附加「 - 」。 – 2012-07-25 06:07:41

回答

2

您可以保留一個數組,其中包含所有在一節中找到的水果名稱。當你遇到一個分號時,如果它的名字存在於數組中並追加一個' - '(如果它沒有),那麼你檢查每一個水果,然後清除該數組並繼續下一節。

+0

我明白了。是的,這是我想到的。我會試一試。 Thx – 2012-07-25 06:13:46

+0

如果在第一節中缺少這一行,這不起作用。如果你想這樣做,你必須從一開始就有一個完整的水果列表,或者你必須保留所有「部分」直到最後,然後檢查每一個是否包含所有水果。 – Jochen 2012-07-25 06:19:49

+0

我認爲他從一開始就有完整的水果清單,因爲他在他們後面命名了他的變量。 – Michael 2012-07-25 06:22:18

0
if line.count('Apple')==1: 
    Apple.append(str(number)) 
else: 
    Apple.append('-') 
+0

我試過了。恐怕結果會在列表中出現很多' - ',因爲其他所有不包含Apple的行都會成爲其他情況! – 2012-07-25 06:42:41

+0

你可以嘗試: '如果'蘋果'不在['蘋果','橙','梨']:' – HVNSweeting 2012-07-25 08:14:45

0
from collections import defaultdict 
from itertools import takewhile 

d = defaultdict(list) 
valid_fruits = set(['Apple', 'Pear', 'Orange']) 

with open('data.txt') as f: 
    while True: 
     fruits = dict(takewhile(lambda x: x[0] != ';', 
           (line.rstrip().split(' = ') for line in f))) 
     if not fruits: 
      break 
     for fruit in valid_fruits: 
      if fruit in fruits: 
       d[fruit].append(int(fruits[fruit])) 
      else: 
       d[fruit].append('-') 

print d 

輸出:

defaultdict(<type 'list'>, {'Orange': [2, 3, 1], 'Pear': [1, 1, 1], 'Apple': [1, '-', 1]}) 
+0

好的。雖然我認爲我已經在上面找到了一個更加簡單的解決方案,它應該適合我當前的腳本。謝謝。 – 2012-07-25 06:44:03