Разделение строк на фрагменты с помощью, а затем передача этих фрагментов на новый объект. Python 3 - PullRequest
2 голосов
/ 10 января 2020

Я пытаюсь манипулировать списком strings, чтобы каждая строка разбивалась на куски, а затем эти куски сохранялись в новом списке.

Пример:

Оригинал список строк выглядит следующим образом:

l_1 = ['09:13:34\t135\t94\t77\t2.97\t2.247\\\n', '09:14:34\t135\t94\t77\t3.03\t2.207\\\n', '09:15:34\t130\t94\t79\t2.83\t2.331\\\n', '09:16:34\t132\t95\t80\t2.86\t2.331\\\n

Я хотел бы убрать \\\n конца каждой строки, а затем отделить каждую строку в \t. Так, например, l_1[0] должен заканчиваться переходом от этого

'09:13:34\t135\t94\t77\t2.97\t2.247\\\n'

к следующему:

l_2 = ['09:13:34', 135, 94, 97, 2.97, 2.247] 

Для контекста, l_1 из простого текстового файла, где каждая новая строка представляет собой отметка времени для данных биометрии c, каждый текстовый файл является одним участником, и мне нужно объединить все строки в одну строку во фрейме данных pandas, и может потребоваться сделать это для 100-200 текстовых файлов одновременно , Очевидно, я хотел бы иметь возможность автоматизировать это.

То, что я до сих пор пробовал:

import re

with open("data_1.txt") as f:
    contents = f.readlines()

i = contents[0]
re.split(r'\t+', i.rstrip('\\\n'))

print(i)

Однако, когда я запускаю, l_1 просто становится

<class 'list'>
[['', '}']]

Так что я не перешел на хранение фрагменты в новом списке, а затем сделать этот список строк в кадре данных.

Если кто-нибудь скажет мне, что я делаю неправильно (и как это сделать правильно), я был бы очень признателен.

Ответы [ 4 ]

1 голос
/ 10 января 2020

Попробуйте это.

с открытием ("имя файла", 'r') в качестве данных:

for i in dataload.readlines():

    print(str(i.split('\\t')[0:-1]).replace('\'',''))

Вывод-

["09:13:34 ", 135, 94, 77, 2.97]

[" 09:14:34 ", 135, 94, 77, 3.03]

[" 09:15:34 ", 130, 94, 79, 2.83]

["09:16:34", 132, 95, 80, 2.86]

1 голос
/ 10 января 2020

Я добавил два примера ниже. Пожалуйста, проверьте их. Я установил их для чтения по 32 байта за раз. Но вы можете увеличить, уменьшить или go сумасшедший и повеселиться с ним.

Обычный способ:

blocks = []
while True:
    block = f.read(32)
    if block == '':
        break
    blocks.append(block)

Pythoni c Путь ( Один из самых эффективных способов):

blocks = []
for block in iter(partial(f.read,32),''):
    blocks.append(block)

Хорошего дня, сэр.

0 голосов
/ 10 января 2020

Попробуйте:

>>> [re.split(r'\t', x.rstrip('\\\n')) for x in l_1]
[['09:13:34', '135', '94', '77', '2.97', '2.247'], ['09:14:34', '135', '94', '77', '3.03', '2.207'], ['09:15:34', '130', '94', '79', '2.83', '2.331'], ['09:16:34', '132', '95', '80', '2.86', '2.331']]
0 голосов
/ 10 января 2020

Отлично работает, используя Python split() и strip():

l_1 = [
  '09:13:34\t135\t94\t77\t2.97\t2.247\\\n', 
  '09:14:34\t135\t94\t77\t3.03\t2.207\\\n', 
  '09:15:34\t130\t94\t79\t2.83\t2.331\\\n', 
  '09:16:34\t132\t95\t80\t2.86\t2.331\\\n']

l_2 = [line.strip("\\\n") for line in l_1]
l_3 = [line.split("\t") for line in l_2]

Выход для l_3:

[
  ['09:13:34', '135', '94', '77', '2.97', '2.247'],
  ['09:14:34', '135', '94', '77', '3.03', '2.207'],
  ['09:15:34', '130', '94', '79', '2.83', '2.331'],
  ['09:16:34', '132', '95', '80', '2.86', '2.331']
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...