Итерация по строкам текстового файла и выполнение определенных операций - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть тестовый файл со следующими двумя строками текста:

( PIN  700_start_stop( STS_PROP( POS_X 123 )( POS_Y 456 )( BIT_CNT 1 )( 
CNCT_ID 7071869 ))(USR_PROP( VAR 1( Var_typ  -1 )(AssocCd H12 )( termLBLtmc  
+S))

( PIN  700_start_stop( STS_PROP( POS_X 123 )( POS_Y 456 )( BIT_CNT 1 )( 
CNCT_ID 7071869 ))(USR_PROP( VAR 1( Var_typ  -1 )(AssocCd H12 )( termLBLtmc  
+S))

Они хранятся в текстовом файле с именем 'test.txt'

Я пытаюсь выполнить итерациюкаждая отдельная строка текстового файла и, используя регулярное выражение, помещает информацию, которую я хочу, в информационный кадр pandas (не вопрос регулярного выражения, у меня есть это).По какой-то причине я могу получать информацию только из одной строки, а не из всех.Ниже мое мышление:

import re
import pandas as pd

df1 = pd.DataFrame()

with open(r'C:\Users\User1\Documents\Python Scripts\test.txt', 'r') as txt:

for each_line in txt:
    line=txt.read().replace('\n','') # convert line to type str

    re1='.*?'   # Non-greedy match on filler
    re2='(\\d+)'    # Integer Number 1
    re3='((?:[a-z][a-z0-9_]*))' # Variable Name 1

    rg = re.compile(re1+re2+re3,re.IGNORECASE|re.DOTALL)
    m = rg.search(line)
    if m:
        int1=m.group(1)
        var1=m.group(2)
        print ("("+int1 + var1+")"+"\n")
        df1[df1.iloc(), 'Name'] = "("+int1 + var1+")"+"\n"

В идеале вывод на печать этого файла должен быть:

>>(700_start_stop)
>>(700_start_stop)

И кадр данных должен выглядеть примерно так:

 index          Name
   0     (700_start_stop)
   1     (700_start_stop)

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Итак, я просмотрел код и написал более простую версию.Теперь он отлично работает.

import re
import pandas as pd

df1 = pd.DataFrame(columns = ["Name"])

with open('test.txt', 'r') as fi:
    for line in fi:
        line = line.strip()
        rg = re.compile(r'.*?(\d+[a-z_]+)', re.IGNORECASE)
        m = rg.search(line)
        if m:
            df1 = df1.append({"Name" : m[1]}, ignore_index=True)

print(df1)
0 голосов
/ 26 февраля 2019

цикл for над файлом objcet зацикливается на его строках.не делайте этого:

line=txt.read().replace('\n','')

отбросьте эту строку и измените вставку:

m = rg.search(line)

на

m = rg.search(each_line)

"each_line" - текущая строка в каждой итерациифайл объекта.

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