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

使用Windows命令行或Python查找具有模式的文本行,python,windows,parsing,powershell,cmd,Python,Windows,Parsing,Powershell,Cmd,我需要运行一个命令行工具来验证一个文件并显示一系列关于它的信息。我可以将这些信息导出到一个txt文件中,但它包含很多额外的数据。我只需要一行文件: “签名的时间戳为:2012年5月24日星期四17:13:16” 时间可能不同,但我只需要提取这些数据并将其放入文件中。有没有一个好的方法可以从命令行本身或者python来实现这一点?我计划使用Python查找并下载要验证的文件,然后运行命令行工具进行验证,这样它就可以获取数据,然后通过电子邮件发送数据 这是在windows PC上 感谢您的帮助您不需

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

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

时间可能不同,但我只需要提取这些数据并将其放入文件中。有没有一个好的方法可以从命令行本身或者python来实现这一点?我计划使用Python查找并下载要验证的文件,然后运行命令行工具进行验证,这样它就可以获取数据,然后通过电子邮件发送数据

这是在windows PC上


感谢您的帮助

您不需要使用Python来完成此操作。如果您使用的是Unix环境,则可以从命令行直接使用
fgrep
,并将输出重定向到另一个文件

fgrep "The signature is timestamped: " input.txt > output.txt
在Windows上,您可以使用:

find "The signature is timestamped: " < input.txt > output.txt
find“签名有时间戳:output.txt

在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)
将其写入文本文件

您提到的命令行实用程序“显示”了一些信息,因此它很可能正在打印到
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下载(可能使用临时名称),然后在临时文件上运行命令行util以获取详细信息,然后smtplib发送电子邮件…

你的意思是像
grep'一样签名是时间戳:“originalfile>exportfile
?如果其中一个答案足够好,你应该选择它作为你接受的答案(在旁边打一个绿色复选标记),通过点击答案的上投/下投票按钮下的白色复选标记。感谢您的快速回复,我使用windows进行此操作,理想的方法是直接从命令行导出一行。但现在我可以将整个内容导出到一个文本文件中,然后找到某种方法从中提取这一行,并在必要时生成一个文件。@BrianLeeJones我添加了一个Windows命令行解决方案。以后,请指定您使用的平台。很抱歉,我刚刚开始编写代码,并且认为命令行是windows独有的。这行代码是完美的,很容易做到我需要的,非常感谢!对于这种格式的命令行来说并不理想,但所使用的函数仍然可以工作