Задать вопрос

Как вытащить данные по конкретному разделителю?

Первоначально я решил проблему на bash при помощи cut,sed. Но работает эта штука примерно час т.к. объемистые файлы обрабатывает. Решил переделать на Python.

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

слова какие-то 4234 цифры буквы что угодно символы - + 
и табличка:
|текст   |452 | цифры | пробелы    |


То, что я написал уже - смотрит на первый символ строки. Если первый символ "|", то значит перед нами нужная строка (элемент таблицы) и её надо обработать. В идеале я хочу получить список списков (каждая строка таблицы список в общем списке "таблице"), где элементы списка [['слово', '234', 'слово'], ['слово', '234', 'слово']] будут без пробелов и без пустых элементов. И если какой-то элемент между разделителями в табличке пуст, то его надо бы просто пропустить, если слово/цифра между разделителями не заполнило все пространство между разделителями и есть пробел - надо бы от пробела избавиться. Но на практике я получаю что-то вроде списка списков [[' ', 'слово_и_пробел ', ' '],['123', ' ' ,' слово и_чертов_пробле' ]] надо бы как-то предусмотреть, что мне нужны элементы списков: "любые символы между разделителями, кроме пробела и кроме пустоты". Но вот что-то пока не могу догнать как это описать у себя. Не знаком с регекспами питона и вообще слабо знаю питон пока что.

#!/usr/bin/python

import sys
import re
import os

towrl = sys.argv[1]

dodestlip = []
destlip = open(towrl, "r")
dodestlip = destlip.readlines()
length1 = len(dodestlip)
destlip.close()

respa = []
for I in range(length1):
    mregexp = re.compile( '^\|' )
    if len(mregexp.findall( dodestlip[I] )) != 0:
        mregexp = re.compile( r"[|]" )
        respa.append(mregexp.split( dodestlip[I] ))
print respa


какие есть варианты?
  • Вопрос задан
  • 375 просмотров
Подписаться 3 Оценить 2 комментария
Решения вопроса 2
svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
Нужно больше примеров по вашим входным данным и тому, что должно получаться.

Мне кажется re здесь излишний. Попробуйте так:
#coding: utf-8

row = u'|text   |452 | digits |     |'
cells = [cell.strip() for cell in row.split('|') if cell.strip()]
print cells

Результат:
['text', '452', 'digits']
Ответ написан
@766dt
import sys

print([
	[
		cell.strip() for cell in line.split('|') if cell.strip()
	] for line in open(sys.argv[1], "r") if line.startswith('|')
])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы