使用Windows命令行或Python查找具有模式的文本行

我需要运行一个命令行工具来validation一个文件并显示一堆关于它的信息。 我可以将这些信息导出到一个txt文件,但是它包含了很多额外的数据。 我只需要一行文件:

“签名是时间戳:2012年5月24日星期四17:13:16”

时间可能会有所不同,但我只需要提取这些数据并将其放入一个文件。 有没有从命令行或Python可以做到这一点的好方法? 我打算使用Python来定位和下载要validation的文件,然后运行命令行工具进行validation,以便可以获取数据,然后通过电子邮件发送数据。

这是在Windows PC上。

谢谢你的帮助

你不需要使用Python来做到这一点。 如果您使用的是Unix环境,则可以从命令行使用fgrep ,并将输出重定向到另一个文件。

 fgrep "The signature is timestamped: " input.txt > output.txt 

在Windows上,您可以使用:

 find "The signature is timestamped: " < input.txt > output.txt 

你提到命令行实用程序“显示”了一些信息,所以它可能会打印到stdout ,所以一种方法是在Python中运行实用程序,并捕获输出。

 import subprocess # Try with some basic commands here maybe... file_info = subprocess.check_output(['your_command_name', 'input_file']) for line in file_info.splitlines(): # print line here to see what you get if file_info.startswith('The signature is timestamped: '): print line # do something here 

这应该与“使用python下载和定位”很好地匹配 – 以便可以使用urllib.urlretrieve下载(可能使用临时名称),然后在temp文件上运行命令行util以获取详细信息,然后smtplib发送电子邮件…

在Python中你可以做这样的事情:

 timestamp = '' with open('./filename', 'r') as f: timestamp = [line for line in f.readlines() if 'The signature is timestamped: ' in line] 

我还没有测试过,但我认为它会工作。 不知道是否有更好的解决方案。

我不太确定这个导出文件的确切语法,但是python的readlines()函数可能对此有帮助。

 h=open(pathname,'r') #opens the file for reading for line in h.readlines(): print line#this will print out the contents of each line of the text file 

如果文本文件每次都有相同的格式,其余的很容易; 如果不是,你可以做类似的事情

 for line in h.readlines(): if line.split()[3] == 'timestamped': print line output_string=line 

至于写入文件,您需要打开文件写入h=open(name, "w") ,然后使用h.write(output_string)将其写入文本文件