2012-08-02 27 views
0

我需要运行命令行工具来验证文件并显示一堆关于它的信息。我可以将这些信息导出到一个txt文件,但它包含大量额外的数据。我只需要对文件的一行:使用Windows命令行或Python查找带有模式的文本行

“的签名是时间戳:周四五月24 17点十三分十六秒2012”

的时间可能有所不同,但我只需要提取这些数据,并把它成文件。有没有从命令行本身或可能是python做到这一点的好方法?我打算使用Python来定位和下载要验证的文件,然后运行命令行工具来验证它,以便它可以获取数据,然后通过电子邮件发送该数据。

这是在Windows PC上。

感谢您的帮助

+0

你的意思是像'grep'签名是时间戳:'originalfile> exportfile'? – abarnert 2012-08-02 21:52:41

+0

如果其中一个答案足够好,您应该选择它作为您接受的答案(在其旁边放一个绿色的复选标记),方法是单击upvote/downvote按钮下方的白色复选标记作为答案。 – LJNielsenDk 2012-08-03 13:10:00

回答

5

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

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

在Windows下你可以使用:

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

感谢您的快速回复,我为此使用了Windows,理想的方法是直接从命令行导出一行。但现在我可以将整个文件导出到一个文本文件中,然后找到一些方法从中提取一行,并在必要时创建一个文件。 – 2012-08-02 21:58:20

+0

@BrianLeeJones我添加了一个Windows命令行解决方案。将来,请说明您正在使用的平台。 – 2012-08-02 22:22:50

+1

对不起,我刚刚开始编码和计算命令行是独特的Windows。这行代码是完美的,很容易做我需要的,非常感谢你! – 2012-08-02 23:33:16

1

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

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

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

0

我不太确定这个导出文件的确切语法,但是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)将其写入到一个文本文件

+0

对于这种格式的命令行不完全理想,但所使用的功能仍然有效 – pmacd 2012-08-02 22:02:00

2

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

相关问题