Таблица: как разделить одну строку на несколько строк
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Таблица: как разделить одну строку на несколько строк
Добрый день!
Есть таблица с полями[text1],[text2]. В поле [text1] содержится текст разделенный запятыми (без пробелов) - [txt1,txt2,txt3,...txtN], где N число непостоянное, т.е. в разных строках может быть разно количество кусков текста разделенных запятыми. Нужно получить таблицу, в которой берется поле text1 и на его основе создается N строк (в зависимости от N кусков текста в этой строке) и каждая строка в поле text1 заполняется дынными взятыми между запятыми. Поле text2 остается как и было.
Т.е. была таблица:
[a1,a2,a5,a8], [b10]
[с2,c4],[b15]
Нужно получить таблицу:
[a1],[b10]
[a2],[b10]
[a5],[b10]
[a8],[b10]
[c2],[b15]
[c4],[b15]
Пробовал посчитать максимальное количество запятых во всей таблице, создать столько же столбцов и в каждый столбец калькулировать нужные куски текста, а потом копировать строки N раз (в заивисмости от количества запятых в данной строке) и калькулировать туда значения из полученных столбцов, но быстро запутался... Понимаю, что намного проще написать несколько строк на питоне или VB, но опыта в этом не хватает.
Прошу помочь. Спасибо
Есть таблица с полями[text1],[text2]. В поле [text1] содержится текст разделенный запятыми (без пробелов) - [txt1,txt2,txt3,...txtN], где N число непостоянное, т.е. в разных строках может быть разно количество кусков текста разделенных запятыми. Нужно получить таблицу, в которой берется поле text1 и на его основе создается N строк (в зависимости от N кусков текста в этой строке) и каждая строка в поле text1 заполняется дынными взятыми между запятыми. Поле text2 остается как и было.
Т.е. была таблица:
[a1,a2,a5,a8], [b10]
[с2,c4],[b15]
Нужно получить таблицу:
[a1],[b10]
[a2],[b10]
[a5],[b10]
[a8],[b10]
[c2],[b15]
[c4],[b15]
Пробовал посчитать максимальное количество запятых во всей таблице, создать столько же столбцов и в каждый столбец калькулировать нужные куски текста, а потом копировать строки N раз (в заивисмости от количества запятых в данной строке) и калькулировать туда значения из полученных столбцов, но быстро запутался... Понимаю, что намного проще написать несколько строк на питоне или VB, но опыта в этом не хватает.
Прошу помочь. Спасибо
- bingeomap
- Гуру
- Сообщения: 503
- Зарегистрирован: 06 июл 2012, 08:37
- Репутация: 53
- Откуда: Азербайджан, Баку
Re: Таблица: как разделить одну строку на несколько строк
Добрый день!
Этого можно решать в MS Exell. у вас есть это программа?
Этого можно решать в MS Exell. у вас есть это программа?
С уважением,
Биннат Халилов
Биннат Халилов
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Re: Таблица: как разделить одну строку на несколько строк
Да, конечно. А какой инструмент в excel решает такую задачу?
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
- bingeomap
- Гуру
- Сообщения: 503
- Зарегистрирован: 06 июл 2012, 08:37
- Репутация: 53
- Откуда: Азербайджан, Баку
Re: Таблица: как разделить одну строку на несколько строк
скопируйте данные в одном строке, нажимайте правую кнопку, откроется контекстное меню, там выйдет разные варианты вставки: выберите "Транспонировать". смотрите на рисунок:
Получится вот так:
Получится вот так:
С уважением,
Биннат Халилов
Биннат Халилов
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Таблица: как разделить одну строку на несколько строк
Вот питон-скрипт для решения задачи:
Скрипт принимает 2 аргумента — входной файл с разделителями и выходной CSV-файл.
Для простоты поля разделены здесь пробелом:
Код: Выделить всё
# -*- coding: utf-8 -*-
import sys
import csv
inf = csv.reader(open(sys.argv[1], 'rb'), delimiter = ' ')
outf = csv.writer(open(sys.argv[2], 'wb'), delimiter = ',')
l1 = []
l2 = []
for row in inf:
l1.append(row[0])
l2.append(row[1])
for t in zip(l1,l2):
s1 = t[0].split(',')
for s2 in s1:
rrow = (s2, t[1])
outf.writerow(rrow)
Скрипт принимает 2 аргумента — входной файл с разделителями и выходной CSV-файл.
Код: Выделить всё
python test.py infile.txt outfile.csv
Выходной файл:a1,a2,a5,a8 b10
c2,c4 b15
a1,b10
a2,b10
a5,b10
a8,b10
c2,b15
c4,b15
Редактор материалов, модератор форума
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Re: Таблица: как разделить одну строку на несколько строк
Александр, спасибо за ответ.Александр Мурый писал(а):Вот питон-скрипт для решения задачи:...
Правильно ли я понимаю, что данный скрипт обрабатывает таблицу только с двумя строками? А если таких строк миллион, как будет выглядеть данный скрипт?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Таблица: как разделить одну строку на несколько строк
нет, неправильно понимаете
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Re: Таблица: как разделить одну строку на несколько строк
А вот эти строки:Максим Дубинин писал(а):нет, неправильно понимаете.
l1 = []
l2 = []
разве не об этом говорят?
Может я не очень корректно изложил суть задачи, приведя пример с двумя строками... Строк, конечно же, много...
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Таблица: как разделить одну строку на несколько строк
Код: Выделить всё
for row in inf:
пристегивайтесь, турбулентность прямо по курсу
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Таблица: как разделить одну строку на несколько строк
Да, Максим прав.
Если возникают какие-то ошибки или не работает на других данных — пишите (желательно с примером этих данных).
Если возникают какие-то ошибки или не работает на других данных — пишите (желательно с примером этих данных).
Редактор материалов, модератор форума
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Re: Таблица: как разделить одну строку на несколько строк
Вот конкретный пример (входной txt):Александр Мурый писал(а):Да, Максим прав.
Если возникают какие-то ошибки или не работает на других данных — пишите (желательно с примером этих данных).
0100000100000000001 290,53,51,49,47
0100000100000000002 45,43,41,39,37
0100000100000000003 35,33,31,29,27
0100000100000000004 25,23,21,19,17
0100000100000000005 15,13,11,9,7,5
0100000100000000006 3,1,64,62,60,58
...
Скрипт не работает. Насколько я понимаю, по причине того, что перепутаны местами поля с запятыми и без.
Хотя такой тоже не работает:
290,53,51,49,47 0100000100000000001
45,43,41,39,37 0100000100000000002
35,33,31,29,27 0100000100000000003
25,23,21,19,17 0100000100000000004
15,13,11,9,7,5 0100000100000000005
3,1,64,62,60,58 0100000100000000006
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Таблица: как разделить одну строку на несколько строк
Надо было поменять поля местами.
Заменяем строки
на
Работает:
Заменяем строки
Код: Выделить всё
for row in inf:
l1.append(row[0])
l2.append(row[1])
Код: Выделить всё
for row in inf:
l1.append(row[1])
l2.append(row[0])
290,0100000100000000001
53,0100000100000000001
51,0100000100000000001
49,0100000100000000001
47,0100000100000000001
45,0100000100000000002
43,0100000100000000002
Редактор материалов, модератор форума
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Re: Таблица: как разделить одну строку на несколько строк
Ругаться перестал, но на выходе пустой csv. ЧТо не так?Александр Мурый писал(а):Надо было поменять поля местами.
Заменяем строки...
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Таблица: как разделить одну строку на несколько строк
Проверьте, не пропущен ли пробел в качестве разделителя? В смысле, не вышло ли у вас '' вместо ' '.
Редактор материалов, модератор форума
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 03 июл 2008, 09:43
- Репутация: 0
Re: Таблица: как разделить одну строку на несколько строк
Нет, я копировал Ваш код:Александр Мурый писал(а):Проверьте, не пропущен ли пробел в качестве разделителя? В смысле, не вышло ли у вас '' вместо ' '.
Код: Выделить всё
import sys
import csv
inpt = "C:\distr\doma1.txt"
outpt = "C:\distr\doma5.csv"
inf = csv.reader(open(inpt, 'rb'), delimiter = ' ')
outf = csv.writer(open(outpt, 'wb'), delimiter = ',')
l1 = []
l2 = []
for row in inf:
l1.append(row[1])
l2.append(row[0])
for t in zip(l1,l2):
s1 = t[0].split(',')
for s2 in s1:
rrow = (s2, t[1])
outf.writerow(rrow)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя