python извлекает столбцы данных и помещает их рядом

#python #extract #multiple-columns

#python #извлекать #несколько столбцов

Вопрос:

Доброе утро, я новый пользователь python, и у меня есть некоторый опыт работы с MATLAB. Для практики я хотел бы написать скрипт, который также помог бы мне во время моей работы. У меня есть большой файл, и я хотел бы извлечь некоторые столбцы и поместить их рядом (все столбцы имеют одинаковую длину). Итак, я начинаю с такой ситуации :

                             Great amount of text and numbers
                           1         2         3         4         5
                           O         O         O         O         O
      SpecialText --       text      text      text      text      text
       1 1   A  1A         col1      col2      col3      col4      col5
       2        2A         col1      col2      col3      col4      col5
       3        2BX        col1      col2      col3      col4      col5
       4        2BY        col1      col2      col3      col4      col5
       5        2BZ        col1      col2      col3      col4      col5
       6 2   B  3A         col1      col2      col3      col4      col5
       7        3AX        col1      col2      col3      col4      col5
       8        3AY        col1      col2      col3      col4      col5

                           6         7         8         9         10
                           O         O         O         O         O
     SpecialText --        text      text      text      text      text
       1 1   A  1A         col6      col7      col8      col9      col10
       2        2A         col6      col7      col8      col9      col10
       3        2BX        col6      col7      col8      col9      col10
       4        2BY        col6      col7      col8      col9      col10
       5        2BZ        col6      col7      col8      col9      col10
       6 2   B  3A         col6      col7      col8      col9      col10
       7        3AX        col6      col7      col8      col9      col10
       8        3AY        col6      col7      col8      col9      col10
  

И я хочу получить что-то вроде:

 col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
...  ...  ...  ...  ...  ...  ...  ...  
  

Мой вопрос действительно прост. Выполнимо ли это для новичка? Существуют ли какие-либо библиотеки, которые я могу использовать, чтобы облегчить эту работу?
Извините за мою неопытность и заранее благодарю.

РЕДАКТИРОВАТЬ: начальный файл является файлом .txt
EDIT2: изменен начальный файл для наглядности

Комментарии:

1. Pandas, вероятно, была бы полезной библиотекой

2. Если у вас есть CSV-файл, вы можете действительно легко достичь этого с помощью pandas

3. Благодаря обоим, начальным файлом является файл .txt, я попытаюсь преобразовать его в .csv

Ответ №1:

Пожалуйста, используйте приведенную ниже программу

 import re
result={}
with open("input.txt","r") as f:
    insidedatablock=False
    line=f.readline()
    while line!='':
        if line.strip().startswith("SpecialText"):
            insidedatablock=True
        if line.strip()=='':
            insidedatablock=False
        if insidedatablock==True:
            cols=re.split("s ",line.strip())
            if cols[0].isdigit() and len(cols)>=7:
                if cols[0] in result:
                    result[cols[0]] =cols[-5:]
                else:
                    result[cols[0]]=cols[-5:]
        line=f.readline()
for i in result:
    print(" ".join(result[i]))
  

Это печатается ниже с заданным текстовым файлом.

 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
  

Комментарии:

1. Большое вам спасибо, эта программа немного выше моих возможностей, поэтому я не смог бы написать ее сам. Есть небольшая проблема: файл большой, и программа извлекает также другие значения, возможно, запуск программы из строки SpecialText решит проблему.

2. Хорошо. Я обновил приведенную выше программу. теперь он будет искать SpecialText , как только он найдет, он начнет считывать данные, пока не найдет пустую строку (после 8-й строки есть пустая строка), как только это будет сделано, он будет искать next SpecialText и повторять выше до конца файла. В принципе, я предполагаю, что данные окружены строкой, начинающейся с SpecialText , и пустой строкой.