假设输入文件看起来像
#this is header
#this is header
#this is header
2,20 12,40 13,100 14,300
15,440 16,10 24,50 25,350
26,2322 27,3323 28,9999 29,2152
30,2622 31,50
你可以使用re
方法 1
如果文件很大
import re
def xy_parser( fname, header_len=3):
with open( fname) as f:
for i,line in enumerate(f):
if i < header_len:
continue
else:
yield re.findall( '[0-9]+,[0-9]+', line)
def xy_maker( xy_str):
return map( float, xy_str.split(',') )
my_xys = []
for xys in xy_parse( 'xydata.txt'):
my_xys += [ xy_maker(val) for val in xys ]
my_xys
#[[2.0, 20.0],
# [12.0, 40.0],
# [13.0, 100.0],
# [14.0, 300.0],
# [15.0, 440.0],
# [16.0, 10.0],
# [24.0, 50.0],
# [25.0, 350.0],
# [26.0, 2322.0],
# [27.0, 3323.0],
# [28.0, 9999.0],
# [29.0, 2152.0],
# [30.0, 2622.0],
# [31.0, 50.0]]
方法 2
我还想指出,如果文件不是太大,那就一口气读完
f = open('xydata.txt', 'r')
header_len = 3
for i in xrange(header_len): # skip the header lines
f.readline()
data_str = f.read().replace('\n','') # read from current file pos to end of file and replace new line chars
data_xy_str = re.findall( '[0-9]+,[0-9]+', data_str)
my_xys = [ xy_maker(xy_str) for xy_str in data_xy_str ]
# yields the same result as above