2013-01-31 3 views
1

Я довольно новичок в Python. Внешнее программное обеспечение для моделирования я использую дает мне отчеты, которые включают в себя данные в следующем формате:Python string split без общего разделителя

1 29 Jan 2013 07:33:19.273 29 Jan 2013 09:58:10.460   8691.186 

Ищу разделить вышеуказанные данные на четыре строки, а именно;

'1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186' 

Я не могу использовать str.split, так как он разбивает дату на несколько строк. Кажется, что есть четыре пробела между 1 и первой датой и между первой и второй датами. Я не знаю, есть ли это четыре пробела или вкладки.

Использование '\t' в качестве разделителя на сплите не очень много. Если я укажу ' ' (4 пробела) в качестве разделителя, я получу первые три строки. Затем я получаю пустую строку и ведущие пробелы в финальной строке. Между второй датой и номером имеется 10 пробелов.

Любые предложения о том, как с этим бороться, будут полезны!

Спасибо!

+0

Вы хотите, чтобы подстроки отображались всегда в том же порядке и типа? (в вашем примере -> номер, дата, дата, номер) –

+0

Действительно ли это формат выходной мощности фиксированной ширины? Сейчас это классная школа, но я видел ее в астрономических данных (и это может означать, что есть _no_ separator вообще, просто отступы). –

+0

@DonalFellows: Ну, так как даты довольно фиксированные с форматом, единственным полем, в котором может быть пробег, является исходный номер счетчика. –

ответ

9

Вы можете разбить на более чем одном пространстве с простым регулярным выражением:

import re 

multispace = re.compile(r'\s{2,}') # 2 or more whitespace characters 
fields = multispace.split(inputline) 

Демонстрация:

>>> import re 
>>> multispace = re.compile(r'\s{2,}') # 2 or more whitespace characters 
>>> multispace.split('1 29 Jan 2013 07:33:19.273 29 Jan 2013 09:58:10.460   8691.186') 
['1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186'] 
0

Если данные фиксированной ширины можно использовать символ адресацию в строке

n=str[0] 
d1=str[2:26] 
d2=str[27:51] 
l=str[52:] 

Однако, если январь 02 показан 2 января, это может не работать как ширина строка может быть переменной

Смежные вопросы