2015-11-10 2 views
-1

У меня есть файл конфигурации и содержимое разделены пробелом «»питон: прочитать файл и разделить данные

кошки конфигурации

/home/user1 *.log,*.txt 30 
/home/user2 *.trm,*.doc,*.jpeg 10 

Я хочу прочитать этот файл, разобрать каждую строку и печать каждое поле из каждой строки.

Ex: -

Dir = /home/user1 
Fileext = *.log,*.txt 
days=30 

Я не мог идти дальше, чем ниже ..

def dir(): 
     file = open('config','r+') 
     cont = file.readlines() 
     print "file contents are %s" % cont 
     for i in range(len(cont)): 
       j = cont[i].split(' ') 

dir() 

Есть указатели, как двигаться дальше?

+0

Что это, это не работает? – lhcgeneva

+2

Если это файлы конфигурации, попробуйте использовать [ConfigParser] (https://docs.python.org/2/library/configparser.html) вместо написания собственного кода синтаксического анализа. И комментарий Лхгененева касается чего-то важного: расскажите нам, в чем проблема. Это исключения для кода? Вы получаете плохие результаты? Разве это не совсем так, и вы не знаете, как это сделать? – skrrgwasme

ответ

0

Ваш код хорошо, вы просто не хватает последнего шага обработки каждого элемента расщепленного строки, попробуйте следующее:

def dir(): 
    file = open('config','r+') 
    cont = file.readlines() 
    print "file contents are %s" % cont + '\n' 
    elements = [] 
    for i in range(len(cont)): 
     rowElems = cont[i].split(' ') 
     elements.append({ 'dir' : rowElems[0], 'ext' : rowElems[1], 'days' : rowElems[2] }) 

for e in elements: 
    print "Dir = " + e['dir'] 
    print "Fileext = " + e['ext'] 
    print "days = " + e['days'] 

dir() 

В конце этого кода, вы будете иметь все строки обрабатываются и хранятся в массиве словарей вы можете легко получить доступ позже.

+1

Он работает..Спасибо – newbie

0

Вы можете написать пользовательскую функцию для разбора каждой строки, а затем использовать функцию map применить эту функцию к каждой строке в file.readlines():

def parseLine(line): 
    # function to split and parse each line, 
    # and return the formatted string 
    Dir, FileExt, Days = line.split(' ')[:3] 
    return 'Dir = {}\nFileext = {}\nDays = {}'.format(Dir, FileExt, Days) 

def dir(): 
    with open('config','r+') as file: 
     print 'file contents are\n' + '\n'.join(map(parseLine, file.readlines())) 

Результаты:

>>> dir() 

file contents are 

Dir = /home/user1 
Fileext = *.log,*.txt 
Days = 30 

Dir = /home/user2 
Fileext = *.trm,*.doc,*.jpeg 
Days = 10 
+0

Он работает..Спасибо – newbie

+0

Добро пожаловать @sameer, но, пожалуйста, подумайте над ответом, если это полезно, так как это общий способ сказать «спасибо» здесь. –

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