2014-01-23 65 views
0

一些我有數據,看起來像這樣查找開始的行範圍內

18 -3.248418 0.326600 1.096954 0.536294 -0.192884 0.071945 1.000000  
19 -3.498030 0.396155 1.101706 0.628693 -0.231044 0.071432 1.000000  
20 -3.827249 0.453596 1.135211 0.723203 -0.312638 0.077363 1.000000  
21 -4.178354 0.558543 1.094458 0.813547 -0.383654 0.059875 1.000000  
22 -4.520537 0.712326 1.025310 0.918873 -0.494836 0.040987 1.000000  
23 -4.898419 0.874629 0.872843 1.072562 -0.581968 0.022534 1.000000  
24 -5.178654 0.986722 0.762628 1.235058 -0.656758 0.022830 1.000000  
25 -5.497410 1.139729 0.608902 1.419559 -0.751435 0.012771 1.000000  
26 -5.685015 1.279948 0.377152 1.601394 -0.869300 0.016318 1.000000  
27 -6.058228 1.424318 0.105117 1.845609 -1.011224 0.009828 1.000000  
28 -6.426589 1.548294 -0.172656 2.048423 -1.112269 0.015640 1.000000  
29 -6.786007 1.633135 -0.527714 2.268596 -1.259513 0.002945 1.000000  

如何我只得到線在特定的範圍內開始了多少?

我想做一些像if line.startswith("20-25"):但這顯然不起作用。 我需要爲不同範圍的多個文件執行此操作。

回答

1

使用條件20 <= num <= 25,其中num是一個整數。

import csv 
with open('filename') as f: 
    reader = csv.reader(f, delimiter=' ') 
    for row in reader: 
     if 20 <= int(row[0]) <= 25: 
      #Do something here 
0

你可以嘗試:

if int(line[:2]) in range(20, 26): 

如果你的號碼可以在長度(即不總是兩個字符)有所不同,您將需要split行:

if int(line.split(" ", 1)[0]) in range(20, 26): 

或者,給你在某些情況下可能需要將該線的其餘部分處理爲漂浮物:

index, data = line.split(" ", 1) 
if int(index) in range(20, 26): 
    data = map(float, data.split(" ")) 
0

因爲你正在尋找一個範圍,你可以停止閱讀文件,一旦你達到了該範圍的結束。並且由於您的列之間用空白分隔,因此str.split()應該有效:

def process_file(filename, range_low, range_high): 
    with open(filename) as f: 
     for line in f: 
      row = line.split() 
      i = int(row[0]) 
      if i < range_low: 
       continue 
      if i > range_high: 
       break 
      data = [float(x) for x in row[1:]] 
      # ...