2012-06-22 58 views
0

我有這方面的工作:地帶和轉換價值/號碼的開出清單

address = [] 

for row in ws.iter_rows(row_offset=4,column_offset=3): 
    if len(row) > 0: 
     cell = row[2] 
     if cell.internal_value is not None: 
      *something here, append appropriate cell values to address* 

print address 
return address 

這將成功地經過一個列在Excel電子表格,並讓每一個非空單元格。儘管如此,在星號中,我不確定如何通過the output並僅提取數字。我知道這可能很奇怪,但我需要的數字是「1.0,2.0,3.0,4.0等」。所有其他部分以及實際數字本身在我閱讀不同的電子表格時可能會有所變化,但它們將採用相同的格式。

所以我需要知道的是我將如何通過這個列表並擺脫所有不是十進制數,並理想地將這些小數轉換爲整數。

我也確定有一個很好的方法來做這個與列表理解,但我只在python編程一個星期,所以我不知道如何真正做到這一點。

對不起,如果這是混亂,並感謝您提前的任何幫助。

回答

1

你可以這樣做:

int_values = [int(v) for v in cell.internal_values if type(v) == float] 

或者說,我注意到,這些值由一個項目分開,所以你可能會想這太:

int_values = [int(cell.internal_values[i]) for i in xrange(1, len(cell.internal_values), 2)] 

(您可能需要使用範圍(,...),因爲第一個應該丟棄,模式從索引1開始)。

+0

我會嘗試第一個。正如我在原始文章中所說的,模式是任意的,並且可能(閱讀:will)每次都會改變,所以我不確定如何獲得該特定文件將是必要的:) – zakparks31191

+0

它的工作原理!非常感謝 – zakparks31191

+0

使用'isinstance(v,float)'而不是檢查'type'。 – jamylak

1

There's no excellent way of checking if a string is a float in Python,但這應該就夠了。

>>> def is_float(n): 
...  try: 
...   float(n) 
...   return True 
...  except ValueError: 
...   return False 
>>> x = ["garbage", "1.0", "trash", "2.0"] 
>>> [i for i in x if is_float(i)] 
['1.0', '2.0'] 
+0

但它不是一個字符串,它是一個浮點數! – jadkik94

+0

@tim我認爲你的想法是正確的,但jadkik94也是對的。該值已經是一個浮點數,並且需要成爲int – zakparks31191

0

所以我需要知道的是我怎麼會去通過這個列表,並擺脫心不是一個小數一切 ,最好那些 小數轉換爲整數。

因爲你的列表中包含花車,而不是字符串是浮動:

only_floats = [i for i in big_list if isinstance(float,i)] 
0

我加入這個答案,因爲在未來的情況下,任何人「的第一部」需要解決的第一部分。問題的第二部分(將float列表轉換爲int)在接受的答案中。

要撕裂了所有的花車,原來的算法修改爲這樣:

addr = [] 

for row in ws.iter_rows(row_offset=4,column_offset=3): 
    if row: 
     cell = row[2] 
     try: 
      addr.append(float(cell.internal_value)) 
     except ValueError: 
      pass 
     except TypeError: 
      pass 

address = [int(v) for v in addr if type(v) == float] 

最後一行是接受的答案代碼。算法修訂實際上是其他人在這裏的工作,但該帖子被刪除了!所以謝謝你的神祕用戶,我希望我能在這裏信任你。