我有一个包含以下两行文本的测试文件:
( 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)
答案 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”是文件对象每次迭代中的当前行。