我的数据看起来像这样
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"):
之类的事情,但显然不起作用。
我需要为具有不同范围的多个文件执行此操作。
答案 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:]]
# ...