2015-02-02 7 views
0

Я новичок в 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'); поля и сохранять значения для новых переменных имени пользователя, FullName и день рождения.

Я пробую его с регулярным выражением. но не знаю, как извлечь поля.

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) 

thx за помощью!

ответ

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 может соответствовать anywere в строке

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, или что-то, что вам нравится. Таким образом, вам не нужно отлаживать код сериализации/десериализации; вы можете просто заглянуть в проверенную стороннюю библиотеку, чтобы справиться с этим. Меньше головных болей.

+0

thx для хорошей эксплантации и вашей рекомендации. Можете ли вы рассказать мне, как я могу разобрать этот txt.file в json? – mvmthecreator

+0

@ user4386249 Ваш JSON-файл будет выглядеть как [this] (https://gist.github.com/masaeedu/49e08bfc5d79b3bd8681). Затем вы сможете получить объект, представляющий все ваши данные, с помощью десериализатора JSON. –

+0

спасибо asad! – mvmthecreator

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

Это регулярное выражение должно работать. http://www.regexr.com/3ab40

Это будет соответствовать но не захватит "данных" строка: (?:data|-)

Это означает, что все, что между кавычками: \'(.*?)+\'

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() 

Это решение обрабатывает пробелы внутри/вне скобок.

Смежные вопросы