stdinstdoutpython

stdinstdoutpython,python,Python,对于我的工作,我习惯于使用matlab。不,我也尝试学习python的基本技能。目前我正在做以下练习: 您感兴趣的是提取所有看起来像 这个 键能LDA-17.23014168 eV 特别是,您希望收集数值(例如, -17.23014168),然后打印出来。编写一个脚本,从标准输入读取输出文件,并使用正则表达式 找到要提取的值。把你的脚本全部打印出来 将值转换为标准输出 这是我使用的代码: import os,re from string import rjust dataEx=re.compi

对于我的工作,我习惯于使用matlab。不,我也尝试学习python的基本技能。目前我正在做以下练习:

您感兴趣的是提取所有看起来像 这个

键能LDA-17.23014168 eV

特别是,您希望收集数值(例如,
-17.23014168
),然后打印出来。编写一个脚本,从标准输入读取输出文件,并使用正则表达式 找到要提取的值。把你的脚本全部打印出来 将值转换为标准输出

这是我使用的代码:

import os,re
from string import rjust

dataEx=re.compile(r'''
    ^\s*
    <Aug22-2008>
    \s+
    <\d{2}:\d{2}:\d{2}>
    \s+
    Bond
    \s
    Energy 
    \s
    LDA 
    \s+
    ((\+|-)?(\d*)\.?\d*)   

    ''',re.VERBOSE)




f=open('Datafile_Q2.txt','r') 
line = f.readline()
while line != '':
 line = f.readline() # Get next line
 m = dataEx.match(line)
 if m:
   # print line
    print m.group(1) 
导入操作系统,重新
从字符串导入rjust
dataEx=re.compile(r''
^\*
\+
\+
债券
\
能量
\
LDA
\+
(\+\124;-)?(\ d*)\.?\d*)
'',重复冗长)
f=打开('Datafile_Q2.txt','r')
line=f.readline()
while line!='':
line=f.readline()#获取下一行
m=dataEx.match(行)
如果m:
#打印行
打印m.group(1)

有了这段代码,我可以在他们要求的数据文件中找到所有值。不过,我确实有几个问题。首先,他们问一些关于标准输入法和标准输出法的具体问题。不,我想知道我是否使用正确的代码从标准输入读取输出文件,是否真的以这种方式将所有值打印到标准输出?此外,我想知道是否有更好或更简单的方法来找到所需的值

为什么要使用正则表达式?拆分输入:

>>> s = """<Aug22-2008> <15:37:37> Bond Energy LDA -17.23014168 eV"""
>>> s.split()[5]
'-17.23014168'

>>>s=“”

要查找您要查找的数字,我将在正则表达式中使用正向的lookback和lookahead函数

(?<=Bond Energy LDA ).*(?= eV)
然后您可以直接从stdin中读取行:

import sys
import re    

from line in sys.stdin:
    matchObj = re.search(r '(?<=Bond Energy LDA ).*(?= eV)', line, re.I)
    if(matchObj):
        print(matchObj.group())
导入系统 进口稀土 从sys.stdin中的行:
matchebj=re.search(r’(?如果您想使用正则表达式,您可以使用:

(?:<.*>\W+)[a-zA-Z ]+([-+]?[0-9]*\.?[0-9]+)
(?:\W+[a-zA-Z]+([-+]?[0-9]*\.?[0-9]+)

如果只有一行输入,很难找到正则表达式。
(?:<.*>\W+)[a-zA-Z ]+([-+]?[0-9]*\.?[0-9]+)