Разделить вариантную строку в python

я просматриваю вывод, который имеет варианты строки

1.20.4.2  script1  get_pool  tim 3.15.08
1.20.5.1  script1  get_aggregate  bob 3.16.10
2.0.4  script2  get_aggregate, get_pool tim 3.16.10
2.0.5  script2  get_aggregate, get_pool, make_volume paul 3.24.10 

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

я смог справиться с 1 или 2 функциями, но потом я наткнулся на другую с 3

if "," in line:
    (item , name, function1, function2, owner, date) = line.split()
    function1 = function1[:-1]
    function = ("|").join([function1, function2])
else:
    (item, name, function, owner, date) = line.split()

я использую с помощью python 3.x

Вместо этого опубликуйте фактические данные.

Tim Biegeleisen 11.12.2020 00:47

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

Grismar 11.12.2020 00:50

я обновил набор данных

mwininger 11.12.2020 00:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как бы я это сделал.

Паттерн, который я вижу, заключается в том, что функции всегда попадают между первыми двумя и двумя последними словами.

Я использовал нарезку после разделения каждой строки.

text = """1.20.4.2  script1  get_pool  tim 3.15.08
1.20.5.1  script1  get_aggregate  bob 3.16.10
2.0.4  script2  get_aggregate, get_pool tim 3.16.10
2.0.5  script2  get_aggregate, get_pool, make_volume paul 3.24.10
"""


# Split each line into words after splitting text into lines
tokens = [line.split() for line in text.splitlines()]

LINE = 10 * "*" # For prettier output.

# Use slicing syntax to get first two words [:2]
# All words except first two and last two [2:-2]
# Strip the comma from each word inside a comprehension
# Use slicing syntax to get last two words [-2:]
for (item, name), functions, (owner, date) in [
    (items[:2], [word.strip(",") for word in items[2:-2]], items[-2:])
    for items in tokens
]:
    for message in (
        f"The item, name are {(item, name)}",
        f"The functions are {functions}",
        f"The owner, date are {(owner, date)}",
        LINE,
    ):
        print(message)

ВЫХОД:

The item, name are ('1.20.4.2', 'script1')
The functions are ['get_pool']
The owner, date are ('tim', '3.15.08')
**********
The item, name are ('1.20.5.1', 'script1')
The functions are ['get_aggregate']
The owner, date are ('bob', '3.16.10')
**********
The item, name are ('2.0.4', 'script2')
The functions are ['get_aggregate', 'get_pool']
The owner, date are ('tim', '3.16.10')
**********
The item, name are ('2.0.5', 'script2')
The functions are ['get_aggregate', 'get_pool', 'make_volume']
The owner, date are ('paul', '3.24.10')
**********

Другие вопросы по теме