python 逐行读取txt并保存到适当的数据结构

问题描述 :想在要把一个txt文件逐行分析并将有用数据保存在适当的数据结构 此txt文件中,如果行开头是“#”则为注释行,忽略;如果行开头是“:”则为有效行,需要将所有有效行按顺序保存到适当的数据结构,谢谢了!

第1个回答  2011-10-18
from __future__ import with_statement
import re

data_re = re.compile(ur'^:(\w+)\s+\("(.+?)"\)$')
data = []
with open('xxx.txt') as f:
for line in f:
if line.startswith(':'):
found = data_re.findall(line.strip())
if found:
data.append(found[0])

print data本回答被提问者采纳
第2个回答  2011-10-18
请问,你用的是python3x 还是python2x啊?因为python3与python2对字符串有一些改变。
你的txt文本中有除了ascii之外的字符吗?追问

2.5, 有效行类似于 :FilePath ("C:\\TQ\\Edk2DailyTest\\Log\\TmDaily.log") 然后我还需要FilePath 和 c:\\.....log 保存到一个数据结构中 然后每一行都是类似这样的 将每一行分析后保存到合适的数据结构中,我想用列表的列表 不知如何? 谢谢

追答

网友lix_xu的程序中with语句并非必须,因为这里是只对文件进行读。其他地方基本可用。
对于LZ你的追问,说想将有效行保存到列表的列表中是否合适,答案在于你想日后怎么访问这些数据。例如,假如你想日后通过FilePath来访问c:\\...log,那么用字典好一点。如果日后想用有效行的行号来访问,则列表的列表也可以。如果日后不对c:\\...log的内容进行修改的话,使用网友lix_xu的程序就挺好。他的程序最后得到的是元组的列表。对于网友lix_xu的正则表达式'^:(\w+)\s+\("(.+?)"\)$'中第二个括号内,也即(.+?)这一部分,想问一下,使用(.+)不就可以吗?为什么还要再加一个?这个数量词呢?
鉴于lix_xu的程序生成的结果是元组的列表,我这里的程序就生成字典吧。
imoprt re
prt=re.compile(r'^\s*:(\w+)\s+\("(.+)"\)\s*')
mydata={}
myfile=open('xxx.txt')
for line in myfile:
found=prt.findall(line)
if found
mydata[found[0][0]]=found[0][1]
#现在mydata中就是你要的数据了,组织成FilePath ---> c:\\...log的形式

第3个回答  2011-10-18
python中#本来就是行注释
相似回答