URN Logo
UNIX Resources » Linux » China Linux Forum » Python 编 程 » 6 » 请教读取有用的行
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
请教读取有用的行
请教读取有用的行 - 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)]
 
Subject: 请教读取有用的行
Author: happyhappy    Posted: 2005-09-21 20:21    Length: 3,103 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]
Subject: Re: 请教读取有用的行
Author: passworld    Posted: 2005-09-21 23:22    Length: 1,054 byte(s)
[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]
Subject: Re: 请教读取有用的行
Author: happyhappy    Posted: 2005-09-22 11:22    Length: 1,852 byte(s)
[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]
Subject: Re: 请教读取有用的行
Author: passworld    Posted: 2005-09-22 13:08    Length: 120 byte(s)
[Original] [Print] [Top]
你一句出错就把我打发了?出什么错,你自己不能除这个错吗?出错的原因很复杂吗?出了问题要先想解决方法。

----
[Original] [Print] [Top]
Subject: Re: 请教读取有用的行
Author: happyhappy    Posted: 2005-09-22 15:24    Length: 170 byte(s)
[Original] [Print] [Top]
passworld老师:我把你气死了吧,千万别生气啊,我也是不求多上进的人,有一点进步就高兴的不得了,所以你千万别介意,一后还要你多帮助呢.我已经进步了,多谢你了,还有帮助过我的所有各位了
[Original] [Print] [Top]
Subject: Re: 请教读取有用的行
Author: limodou    Posted: 2005-09-22 16:38    Length: 166 byte(s)
[Original] [Print] [Top]
为什么很麻烦,找到麻烦的原因你就可以去解决它,看一看有没有简单的方法。

如果是有很多相同的处理语句,为什么不考虑写成一个函数,或作一个通用的处理呢?
----
[Original] [Print] [Top]
Subject: Re: 请教读取有用的行
Author: passworld    Posted: 2005-09-22 20:42    Length: 270 byte(s)
[Original] [Print] [Top]
没什么生气的,只是从你再问的问题看,你基本上没好好看过我给的代码,只是把它抄过来,跑一下,不行,算。然后又回头重新自己硬来。

研究别人的代码是提高你自己的编程能力的最有效的途径。看别人为什么这么写,然后在自己的代码里模仿。


----
[Original] [Print] [Top]
« Previous thread
PYTHON的邮件列表怎么了?
Python 编 程
6
Next thread »
如何在raw_input输入时自动补全路径名?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:11:03, cost 0.043182134628296 ms.