2012-08-02 17 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發送電子郵件...