#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-й строки есть пустая строка), как только это будет сделано, он будет искать nextSpecialText
и повторять выше до конца файла. В принципе, я предполагаю, что данные окружены строкой, начинающейся сSpecialText
, и пустой строкой.