遍历文本文件的行并执行某些操作

时间:2019-02-26 17:05:36

标签: python regex pandas

我有一个包含以下两行文本的测试文件:

( 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”的文本文件中

我试图遍历文本文件的每一行,并使用正则表达式将所需的信息推送到熊猫数据框(不是正则表达式的问题,我知道了)。由于某种原因,我只能从一行而不是全部中获取信息。以下是我的想法:

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 :(得分:1)

因此,我查看了代码并编写了一个简单的版本。现在,它可以正常工作。

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)

答案 1 :(得分:0)

文件上的for循环objcet遍历其行。 不要那样做:

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

舍弃该行并插入更改:

m = rg.search(line)

m = rg.search(each_line)

“ each_line”是文件对象每次迭代中的当前行。