LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1449|回复: 8

请教如何python写教本编辑我的文本?

[复制链接]
发表于 2007-1-29 10:51:45 | 显示全部楼层 |阅读模式
我现在想编辑一个文本, 大致过程是这样的: 我之前用脚本写了一个文本,pkgdep: 后面包括一条信息,假如此行已满就转到下行。在这个文本里每条信息都包括一个关键字:"depend:"  该本文的形式如下:
    pkgdep: net-zope/cvsfile-0.9.0  depend: app-arch/unzip-5.52
      pkgdep: net-zope/silvametadata-0.8  depend:
      pkgdep: games-emulation/generator-0.35  depend: sys-libs/glibc-2.3.5-r2  x11-libs/gtk+-1.2.10-r11 media-libs/libsdl-1.2.8-r1
      pkgdep: net-zope/silva-1.2  depend:
    现在我想做的就是:把depend: 后面没有内容的 那一条全部都提取出来,写到某文件中去。
   由于刚学python,希望大家多多指教,先谢了,呵呵
发表于 2007-1-29 19:25:04 | 显示全部楼层
如下脚本名为 test.py  :

  1. #!/usr/bin/python

  2. import sys

  3. if len(sys.argv) < 2:
  4.         print len(sys.argv)
  5.         print "usage: %s <inputfile> <outputfile>" %sys.argv[0]
  6.         sys.exit()

  7. input = open(sys.argv[1])
  8. line = input.readline()
  9. while line:
  10.         strs = line.split()

  11.         # 若 'depend:' 不在文件末尾,则用:
  12.         # if 'depend:" in strs:   替换下一行:
  13.         if strs[-1] == 'depend:':
  14.                 print line,
  15.         line = input.readline()
复制代码


用法为:  $ test.py file1 > file2
另:
如果在Linux下则用sed处理会非常简单:
sed -n '/depend:/p' file1 > file2
回复 支持 反对

使用道具 举报

发表于 2007-3-1 17:02:24 | 显示全部楼层
  1. #!/usr/bin/env python
  2. import re
  3. input = open("foodata", "r")
  4. for str in input.readlines():
  5.         if re.search("depend:$", str): print str,
  6. input.close()
复制代码
using re seems a little easier...
回复 支持 反对

使用道具 举报

发表于 2007-3-2 23:07:45 | 显示全部楼层
Post by chunchengfh
如下脚本名为 test.py  :

  1. #!/usr/bin/python

  2. import sys

  3. if len(sys.argv) < 2:
  4.         print len(sys.argv)
  5.         print "usage: %s <inputfile> <outputfile>" %sys.argv[0]
  6.         sys.exit()

  7. input = open(sys.argv[1])
  8. line = input.readline()
  9. while line:
  10.         strs = line.split()

  11.         # 若 'depend:' 不在文件末尾,则用:
  12.         # if 'depend:" in strs:   替换下一行:
  13.         if strs[-1] == 'depend:':
  14.                 print line,
  15.         line = input.readline()
复制代码


用法为:  $ test.py file1 > file2
另:
如果在Linux下则用sed处理会非常简单:
sed -n '/depend:/p' file1 > file2


sed 应该是这样吧:

  1. sed -n '/depend:\ *$/p' file1 > file2
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-3-2 23:21:15 | 显示全部楼层
Post by yongjian

  1. #!/usr/bin/env python

  2. import re

  3. input = open("foodata", "r")
  4. for str in input.readlines():
  5.         if re.search("depend:$", str): print str,
  6. input.close()
复制代码

using re seems a little easier...


感觉如果最后有空格的话,需要加
  1. \ *
复制代码
吧?
回复 支持 反对

使用道具 举报

发表于 2007-3-3 13:26:55 | 显示全部楼层
yes, if considering spaces, we can do \s*
回复 支持 反对

使用道具 举报

发表于 2007-3-3 19:02:29 | 显示全部楼层
多谢zhy2111314的提醒。我原来的sed代码忘记了代表结尾的"$"符号了。
如果考虑到结尾有空格或者\t字符, 则:
  1. $ sed -n "/depend:[ \t]*$/p" file1 > file2
复制代码

还好我的python代码当depend:后面有空格或者\t字符时也是适应的。 (:
回复 支持 反对

使用道具 举报

发表于 2007-3-3 23:21:19 | 显示全部楼层
Post by chunchengfh
多谢zhy2111314的提醒。我原来的sed代码忘记了代表结尾的"$"符号了。
如果考虑到结尾有空格或者\t字符, 则:

  1. $ sed -n "/depend:[ \t]*$/p" file1 > file2
复制代码


还好我的python代码当depend:后面有空格或者\t字符时也是适应的。 (:

呵呵,客气!
的确,在 python 里面是没问题的。
回复 支持 反对

使用道具 举报

发表于 2007-3-3 23:22:03 | 显示全部楼层
Post by yongjian
yes, if considering spaces, we can do \s*

恩,刚开始看 python,学习呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表