查找以范围内的数字开头的行

时间:2014-01-23 10:41:15

标签: python csv

我的数据看起来像这样

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"):之类的事情,但显然不起作用。 我需要为具有不同范围的多个文件执行此操作。

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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(" "))

答案 2 :(得分: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:]]
            # ...