файл журнала в кадре данных - PullRequest
1 голос
/ 22 апреля 2020

У меня есть файл журнала:

20-04-21 15:04:54.355 -07 000000105 INF: Y Motor: Loading Y Motion Profile for 0.830 mm

20-04-21 15:04:54.355 -07 000000105 INF: Y Motor: The Y Motion Profile for 0.830 mm is already loaded, skipping

20-04-21 15:04:54.355 -07 000000105 INF: SipperMotor: Set Sipper Position Down

20-04-21 15:04:54.355 -07 000000105 INF: FPGA: Xmit SIPDOWN\n [SipperMotor]

20-04-21 15:05:07.665 -07 000000136 INF: FPGA: Recv SIPDOWN

20-04-21 15:05:07.665 -07 000000105 INF: FPGA: 'SIPDOWN' command took 0 ms to send, 13300 ms to get response, and 13305 ms overall
  1. Нет заголовка
  2. Я хочу разделить первый столбец на дату ## - ## - # #
  3. Второй столбец должен быть ##: ##: ##. ###
  4. Третий столбец должен быть - ##
  5. Четвертый столбец должен быть XXX:
  6. Пятый столбец должен содержать все остальное как текст

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Я бы прочитал файл как один столбец и извлек:

df = pd.read_csv('file.txt', header=None, sep='\t')
df = df[0].str.extract('(\S+) (\S+) (\S+) (\S+) (.*)$')

Вывод:

    0         1               2          3  4
--  --------  ------------  ---  ---------  ----------------------------------------------------------------------------------------------
 0  20-04-21  15:04:54.355  -07  000000105  INF: Y Motor: Loading Y Motion Profile for 0.830 mm
 1  20-04-21  15:04:54.355  -07  000000105  INF: Y Motor: The Y Motion Profile for 0.830 mm is already loaded, skipping
 2  20-04-21  15:04:54.355  -07  000000105  INF: SipperMotor: Set Sipper Position Down
 3  20-04-21  15:04:54.355  -07  000000105  INF: FPGA: Xmit SIPDOWN\n [SipperMotor]
 4  20-04-21  15:05:07.665  -07  000000136  INF: FPGA: Recv SIPDOWN
 5  20-04-21  15:05:07.665  -07  000000105  INF: FPGA: 'SIPDOWN' command took 0 ms to send, 13300 ms to get response, and 13305 ms overall
0 голосов
/ 22 апреля 2020

Поскольку у вас фиксированная ширина отформатированных строк. Вы можете использовать pd.read_fwf

df = pd.read_fwf('d1.csv', colspecs=[(0,8),(9,21),(22,25),(26,35),(36,-1)], header=None)

df
           0               1       2        3                                                   4
0   20-04-21    15:04:54.355    -7.0    105.0   INF: Y Motor: Loading Y Motion Profile for 0.8...
1   20-04-21    15:04:54.355    -7.0    105.0   INF: Y Motor: The Y Motion Profile for 0.830 m...
2   20-04-21    15:04:54.355    -7.0    105.0   INF: SipperMotor: Set Sipper Position Down
3   20-04-21    15:04:54.355    -7.0    105.0   INF: FPGA: Xmit SIPDOWN\n [SipperMotor]
4   20-04-21    15:05:07.665    -7.0    136.0   INF: FPGA: Recv SIPDOWN
5   20-04-21    15:05:07.665    -7.0    105.0   INF: FPGA: 'SIPDOWN' command took 0 ms to send...

colspecs: список кортежей (int, int) или 'infer'. необязательный

Список кортежей, дающий экстенты полей фиксированной ширины каждой строки в виде полуоткрытых интервалов (т. е. [from, to[). Строковое значение ‘infer’ можно использовать, чтобы дать парсеру команду попытаться определить спецификации столбцов из первых 100 строк данных, которые не пропускаются с помощью пропусков (default=’infer’). - do c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...