python从textfile中提取数据

时间:2015-02-02 03:38:25

标签: python

我是python的新手,需要帮助。我想从文本文件中提取数据,并且不知道如何以正确的方式处理它。

sample.txt的

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
data('unimportant', 'unimportant2');    
data('user', 'Marcus');
data('fullname', 'Marcus Dwony');
data('birthday', '14.05.1981');
data('unimportant3', 'unimportant4');
data('unimportant5', 'unimportant6');
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam

我想提取data('SOME1','VALUE1');字段并将值存储到名为user,fullname和birthday的新变量中。

我用正则表达式尝试。但不知道如何提取田地。

import re

with open ("sample.txt") as f_in:       
    for line in f_in:
        if re.match(r"data\(\'(user|fullname|birthday)", line):
            print(line)
这是任何帮助!

4 个答案:

答案 0 :(得分:2)

尝试这样:

>>> f = open('your_file.txt')
>>> for x in f:
...     k = re.search(r"'(user|fullname|birthday)', '(.*)'", x)
...     if  k:
...         print "{} {}".format(k.group(1), k.group(2))
... 
user Marcus
fullname Marcus Dwony
birthday 14.05.1981

注意match匹配字符串的开头,但search可以匹配字符串中的任意内容

答案 1 :(得分:0)

更改正则表达式,以便您拥有与数据值对应的组。

"data\('(user|fullname|birthday)',\s+'([!']+)'\)"

保留对re.match返回的值的引用:它是MatchObject。您可以从中提取第二组:

match = re.match(r"data\('(user|fullname|birthday)',\s+'([^']+)'\)", line)
if (not(match is None)):
    print(match.group(2)

虽然这是解决问题的一种方法,但我强烈建议您使用其中一种已经存在的无数方便,定义明确且易于使用的数据格式,如JSON或YAML或任何适合您的想法。这样您就不必调试序列化/反序列化代码;你可以放入一个经过验证的第三方库来处理它。减少头痛。

答案 2 :(得分:0)

(?:data|-)\(\'(user|fullname|birthday)+\', \'(.*?)+\'\);

这个正则表达式应该可行。 http://www.regexr.com/3ab40

这将匹配但不会捕获“数据”字符串:(?:data|-)

这意味着引号之间的所有内容:\'(.*?)+\'

答案 3 :(得分:0)

for line in lines:
    m = re.match(r'^data\s*\(\s*\'(user|fullname|birthday)\'\s*,\s*\'(.*)\'\s*\)\s*;$', line.strip())
    if m:
        print m.groups()

此解决方案处理大括号内/外的空间。