я просматриваю вывод, который имеет варианты строки
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
Разделены ли функции запятыми, как предполагают ваши фиктивные данные? Пожалуйста, предоставьте репрезентативную выборку фактических данных.
я обновил набор данных
Вот как бы я это сделал.
Паттерн, который я вижу, заключается в том, что функции всегда попадают между первыми двумя и двумя последними словами.
Я использовал нарезку после разделения каждой строки.
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')
**********
Вместо этого опубликуйте фактические данные.