Как извлечь данные из текстового файла в Python? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть текстовый файл, который содержит много информации.Я пытался обратиться за помощью по этому поводу.Я нашел некоторые вещи, которые были немного похожи, но не совсем то, что я хотел сделать.

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

Я новичок в Python.Пожалуйста, помогите решить эту проблему.

//Text file starts
---------------------------SOFTWARE NAME------------------------------------

I/O Filenames:  abc.txt           
Variables:______                       
------------------------------------------------------------------------

 Method name.

  Coordinates :      0         0

     S.No.      X(No.)    Y(No.)      Z(Beta)    A(Alpha)

     1    3.541            0
     2    7.821          180
     3    2.160            0
     4    4.143            0    3.69            0
     5    2.186            0    2.18            0
     6    3.490            0    2.45            0
//End of text file

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Вы можете попытаться извлечь данные с помощью модуля re ( regex101 ):

import re
from itertools import zip_longest

data = '''
//Text file starts
---------------------------SOFTWARE NAME------------------------------------

I/O Filenames:  abc.txt
Variables:______
------------------------------------------------------------------------

 Method name.

  Coordinates :      0         0

     S.No.      X(No.)    Y(No.)      Z(Beta)    A(Alpha)

     1    3.541            0
     2    7.821          180
     3    2.160            0
     4    4.143            0    3.69            0
     5    2.186            0    2.18            0
     6    3.490            0    2.45            0
//End of text file
'''

l = [g.split() for g in re.findall(r'^\s+\d+\s+[^\n]+$', data, flags=re.M)]
for v in zip(*zip_longest(*l)):
    print(v)

Отпечатки:

('1', '3.541', '0', None, None)
('2', '7.821', '180', None, None)
('3', '2.160', '0', None, None)
('4', '4.143', '0', '3.69', '0')
('5', '2.186', '0', '2.18', '0')
('6', '3.490', '0', '2.45', '0')
0 голосов
/ 25 июня 2019

Используйте модуль re для извлечения текста.Используйте модуль numpy для создания нужного вам «массива».

import re 
import numpy as np

text = """
//Text file starts
---------------------------SOFTWARE NAME------------------------------------

I/O Filenames:  abc.txt           
Variables:______                       
------------------------------------------------------------------------

 Method name.

  Coordinates :      0         0

     S.No.      X(No.)    Y(No.)      Z(Beta)    A(Alpha)

     1    3.541            0
     2    7.821          180
     3    2.160            0
     4    4.143            0    3.69            0
     5    2.186            0    2.18            0
     6    3.490            0    2.45            0
//End of text file
"""

regex = r'(?<=^\s{5})\d\s*[\d\.]*\s*\d*'
matches = [x.split() for x in re.findall(regex, text, flags=re.MULTILINE)]

arr = np.array(matches)
print(arr)

Обеспечивает вывод:

[['1' '3.541' '0']
 ['2' '7.821' '180']
 ['3' '2.160' '0']
 ['4' '4.143' '0']
 ['5' '2.186' '0']
 ['6' '3.490' '0']]
0 голосов
/ 25 июня 2019

Для этого я бы использовал пакет csv

import csv #Import the package

with open('/path/to/file.csv') as csvDataFile: #open the csv file
    csvReader = csv.reader(csvDataFile,delimiter=';') #load the csv file with the delimiter of your choice, here it is a ; 
    for row in csvReader:
      #do something with the row

Я советую вам лучше отформатировать файл, хороший будет:

S.No.;X(No.);Y(No.);Z(Beta);A(Alpha)
1;3.541;0;;
2;7.821;180;;
3;2.160;0;;
4;4.143;0;3.69;0
5;2.186;0;2.18;0
6;3.490;0;2.45;0

Вот ссылка с дополнительной информацией

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