【发布时间】:2011-03-01 13:10:18
【问题描述】:
我有一个文件,其中包含我想要提取的特定数据。
文件如下所示:
DS User ID 1
random garbage
random garbage
DS N user name 1
random garbage
DS User ID 2
random garbage
random garbage
DS N user name 2
到目前为止我有:
import sys
import re
f = open(sys.argv[1])
strToSearch = ""
for line in f:
strToSearch += line
patFinder1 = re.compile('DS\s+\d{4}|DS\s{2}\w\s{2}\w.*|DS\s{2}N', re.MULTILINE)
for i in findPat1:
print(i)
我的屏幕输出如下所示:
DS user ID 1
DS N user name 1
DS user ID 2
DS N user name 2
如果我使用以下方式写入文件:
outfile = "test.dat"
FILE = open(outfile,"a")
FILE.writelines(line)
FILE.close()
所有内容都被推送到一行:
DS user ID 1DS N user name 1DS user ID 2DS N user name 2
我可以接受输出的第一个场景。理想情况下,虽然我想从输出文件中删除“DS”和“DS N”并用逗号分隔。
User ID 1,user name 1
User ID 2, username 2
关于如何完成此任务的任何想法?
【问题讨论】:
-
嗨,欢迎来到 StackOverflow。请花一点时间熟悉一下编辑器,尤其是可用于格式化代码的代码按钮
{}。 -
这显然不是你真正的程序。一方面,您永远不会使用正则表达式。它也与您提供的样本不匹配,至少与大多数样本不匹配。你永远不会定义
findPat1。 -
请清楚地描述您的输入数据是什么样的以及您使用什么标准来匹配。从您的样本看来,寻找以
DS开头的行就足够了——如果不是,请说明规则。您似乎正在尝试匹配相应的用户 ID/用户名条目。如果我们知道您在做什么,我们肯定可以向您展示更好的方法。