Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2010 14:09:13

XPb14
От:
Зарегистрирован: 2010-09-07
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

существует текстовый файл типа

[Name0]
string
string
string
[Name1]
string
string
string
[Name2]
string
string
string
его надо разбить в двумерный список (в list пойдёт всё что в Name0, в list пойдёт всё что в Name1, в list пойдёт всё что в Name2), так вот вопрос - как это лучше реализовать? (так же интересно как перейти к считыванию следующей строки файла, тоесть в цикле есть if, проходя через который, должна считаться следующая строка)



Офлайн

#2 Окт. 29, 2010 14:27:37

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2684
Репутация: +  182  -
Профиль   Отправить e-mail  

парсить текстовый файл

ConfigParser



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#3 Окт. 29, 2010 14:46:58

XPb14
От:
Зарегистрирован: 2010-09-07
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

Очень интересная комманда, но не совсем то, у меня под названием раздела просто строки, а не значения
пример:

[5й класс]
Иванов
Петров



Офлайн

#4 Окт. 29, 2010 16:22:33

shupg
От:
Зарегистрирован: 2009-08-07
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

Типа так?

f = open('txt.txt')
classes = {}
current_class = None
for line in f.readlines():
if line.startswith('['):
current_class = line.strip('[]\n')
classes[current_class] = []
else:
classes[current_class].append(line.rstrip())

f.close()

print classes



Офлайн

#5 Окт. 30, 2010 11:27:50

XPb14
От:
Зарегистрирован: 2010-09-07
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

тож не то, классов же несколько, должен быть двумерный список
пример:

[5й класс]
Иванов
Петров
[6й класс]
Сидоров
Пупкин
[7й класс]
Шлёпанцев
Коклюшкин
и на выходе
list[0][0] = "Иванов"
list[0][1] = "Петров"

list[1][0] = "Сидоров"
list[1][1] = "Пупкин"

list[2][0] = "Шлёпанцев"
list[2][1] = "Коклюшкин"



Офлайн

#6 Окт. 30, 2010 17:31:54

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

Как-то так ?

in_file = open('test.txt','r')
big_list = []
i = -1
for line in in_file:
if line.startswith('['):
big_list.append([])
i += 1
else:
big_list[i].append(line.strip())



Офлайн

#7 Окт. 31, 2010 02:55:20

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

гы )

big_list = in_file.read().split('[')[1:]
for n, i in enumerate(big_list):
big_list[n] = i.split('\n')[1:-1]
если пустые строки не должны быть учтены, то заменяем строку:
    big_list[n] = [line for line in i.split('\n')[1:] if line]



Отредактировано (Окт. 31, 2010 02:57:01)

Офлайн

#8 Ноя. 1, 2010 09:14:21

XPb14
От:
Зарегистрирован: 2010-09-07
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

спасибо всем, сделал как написал pasaranax, всё работает



Офлайн

#9 Ноя. 1, 2010 09:26:34

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

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



Офлайн

#10 Ноя. 2, 2010 09:06:51

XPb14
От:
Зарегистрирован: 2010-09-07
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

парсить текстовый файл

ну по приколу, не по приколу, но получилось вполне то что мне нужно (правда я не совсем догоняю что происходит в этом коде)

ну и собственно может покажеш вариант с двумя циклами? :]



Отредактировано (Ноя. 2, 2010 09:07:51)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version