|
|
|
|
 请教读取有用的行 - happyhappy [ 2005-09-21 20:21 | 3,103 byte(s)]
 Re: 请教读取有用的行 - happyhappy [ 2005-09-22 11:22 | 1,852 byte(s)]
 Re: 请教读取有用的行 - limodou [ 2005-09-22 16:38 | 166 byte(s)]
 Re: 请教读取有用的行 - passworld [ 2005-09-22 13:08 | 120 byte(s)]
 Re: 请教读取有用的行 - happyhappy [ 2005-09-22 15:24 | 170 byte(s)]
 Re: 请教读取有用的行 - passworld [ 2005-09-22 20:42 | 270 byte(s)]
 Re: 请教读取有用的行 - passworld [ 2005-09-21 23:22 | 1,054 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
是这样的,这样一个文件,前面还有一些解释行,高度120的那行是第19行,从19行开始取,一直到高度3540那行,其他的都不要.因为直接用split()不能将文字分开,所以我先独到第19行,然后开始split(), 如果高度=120,读这行,如果高度=180,读这行...如果高度=3540,读这行,高度3540以后就不要了.我这个程序里的问题:1.没有显示出我要选的行.2.我不知道高度3540以后就不要了怎么写.
等间隔高度上的气象要素值
高度(距地) 时间 气温 气压 湿度 露点 温露差 虚温
0 0.0 23.8 995 77 19.6 4.2 26.4 158 2
60 0.3 23.0 988 83 20.0 3.0 25.7 142 1
120 0.6 22.4 981 88 20.4 2.1 25.1 119 1
180 0.9 22.1 974 89 20.3 1.8 24.8 82 1
.......
.......
3420 15.3 5.4 666 67 -0.2 5.6 6.4 279 14
3480 15.6 4.9 661 67 -0.8 5.7 5.9 280 14
3540 15.8 4.5 657 66 -1.3 5.8 5.4 281 14
3600 16.0 4.1 651 66 -1.7 5.8 4.9 283 14
.......
f=open("s545112005080107.txt")
fw=open("e:/su/gnuplot/bin/L2005080107.dat","w")
line=0
for i in f.read():
if i=='
':
line+=1
if line==19:
for line1 in f.readlines():
line2=str.split(line1)
line3=int(str(line2[0]))
print line3
if line3==120:
line=line1
print "120:"
print line2[0],' ',line2[8] ,' ',line2[9]
fw.write(str(int(float(line2[0])))+' '+str(int(float(line2[8])))+' '+str(int(float(line2[9])))+'
')
elif line3==180:
line=line1
print "180:"
print line2[1],' ',line2[2] ,' ',line2[3]
fw.write(str(int(float(line2[0])))+' '+str(int(float(line2[8])))+' '+str(int(float(line2[9])))+'
')
......
elif line3==3540:
line=line1
print "3540:"
print line2[1],' ',line2[2] ,' ',line2[3]
fw.write(str(int(float(line2[0])))+' '+str(int(float(line2[8])))+' '+str(int(float(line2[9])))+'
')
f.close()
fw.close()
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
f.read() 就把所有的行读进去了,这时候 f 的指针指向文件的最尾,所有再做什么
f.readlines() 之类的事就什么也都不出来了,因为已经在文件尾部了。
对于一行一行的处理文件,你可以直接:
for line in f:
...
这个在 python 里就是循环一次读一行。
从3540行后停止,就是说你要从一个循环里跳出来,终止循环,使用 break 这个语句。
lineno = 0
for line in f:
if lineno > 3540:
break
...
lineno += 1
判断一行是否以 120 开头,可以用 line.startswith('120') 来做。
flag = False
for line in f:
if flag or line.startswith('120'):
if not flag:
flag = True
# do something here....
if line.startswith('3540'):
# Done
break
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
passworld:我的系统是 windows,你给我的程序出错,是这个原因吧.我自己又做了一次,运行出来了,但是很麻烦,有没有简单的方法,比如直接把数据行从120-3540一次读出来,因为这些行是连续的.
f=open("s545112005080107.txt")
fw=open("L2005080107.txt","w")
line=0
for i in f.xreadlines():
line=line+1
if line>=18:
for line1 in f.xreadlines():
line2=str.split(line1)
line3=int(str(line2[0]))
#print line3
if line3==120:
line=line1
print "120:"
print line2[0],' ',line2[8] ,' ',line2[9]
fw.write(line)
if line3==180:
line=line1
print "180:"
print line2[0],' ',line2[8] ,' ',line2[9]
fw.write(line)
if line3==240:
line=line1
print "240:"
print line2[0],' ',line2[8] ,' ',line2[9]
fw.write(line)
........
if line3==3540:
line=line1
print "120:"
print line2[0],' ',line2[8] ,' ',line2[9]
fw.write(line)
f.close()
fw.close()
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
passworld老师:我把你气死了吧,千万别生气啊,我也是不求多上进的人,有一点进步就高兴的不得了,所以你千万别介意,一后还要你多帮助呢.我已经进步了,多谢你了,还有帮助过我的所有各位了
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
没什么生气的,只是从你再问的问题看,你基本上没好好看过我给的代码,只是把它抄过来,跑一下,不行,算。然后又回头重新自己硬来。
研究别人的代码是提高你自己的编程能力的最有效的途径。看别人为什么这么写,然后在自己的代码里模仿。
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
|