Python - Разделение данных из текстового файла с помощью разделителя - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь прочитать набор текстовых файлов и сохранить их в Dataframe. Благодаря @jezrael мне удалось заставить это работать, как показано ниже:

list_ = []
dfs = []
for file_ in allFiles:
    with open(file_) as fp:
        lines1 = fp.read().split('\n')
        b = [i.split('~', 1)[1].split('*') for i in lines1]
        df = pd.DataFrame(b)
        dfs.append(df)

dfbig = pd.concat(dfs, ignore_index=True)
dfbig.to_csv('file.csv')

Однако я вижу, что есть несколько строк, которые имеют несколько записей ('~') и, следовательно, каждый раз, когда ('~') встречается более одного раза подряд, он просто выполняет разделение один раз. Я пытаюсь понять, как я могу изменить приведенный выше код так, чтобы разделение происходило каждый раз, когда появляется ('~').

Пример данных:

[ABC*DEF*123>~123*999*HHH~HELLO*TEST*DATA]

Ожидаемый результат:

123 999 HHH
HELLO TEST DATA

1 Ответ

2 голосов
/ 15 марта 2019

Вы можете изменить:

b = [i.split('~', 1)[1].split('*') for i in lines1]

, чтобы составить список с выравниванием и разбивкой по всем ~ значениям с отфильтровыванием первого значения:

b = [x.split('*') for i in lines1 for x in i.split('~')[1:]]

Проверка:

lines1 = ['ABC*DEF*123>~123*999*HHH~HELLO*TEST*DATA']
b = [x.split('*') for i in lines1 for x in i.split('~')[1:]]
print (b)
[['123', '999', 'HHH'], ['HELLO', 'TEST', 'DATA']]

Тогда решение должно быть изменено на extend:

list_ = []

allFiles = glob.glob('csv/*.*')
for file_ in allFiles:
    with open(file_) as fp:
        lines1 = fp.read().split('\n')
        b = [x.split('*') for i in lines1 for x in i.split('~')[1:]]
        list_.extend(b)

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