2012-08-02 3 views
0

파일을 확인하고 많은 정보를 표시하는 명령 줄 도구를 실행해야합니다. 이 정보를 txt 파일로 내보낼 수 있지만 많은 추가 데이터가 포함되어 있습니다.Windows 명령 줄 또는 Python을 사용하여 패턴이있는 텍스트 줄 찾기

"서명 타임 스탬프입니다 : 24 17시 13분 16초 2,012 목 월"난 그냥 파일의 한 줄 필요가

시간은 다를 수 있습니다,하지만 난 그냥이 데이터를 추출하고 둘 필요가 파일로. 명령 줄 자체 또는 파이썬에서이 작업을 수행 할 수있는 좋은 방법이 있습니까? 필자는 Python을 사용하여 검증 할 파일을 찾고 다운로드 한 다음 명령 줄 도구를 실행하여 데이터를 가져 와서 해당 데이터를 전자 메일로 보낼 수 있도록 확인합니다.

이것은 Windows PC에 있습니다.

당신의 도움에 감사드립니다.

+0

'grep'과 같은 의미가 있습니다. 서명의 타임 스탬프는 'originalfile> exportfile'입니까? – abarnert

+0

답변 중 하나가 충분하다면 답변에 대한 upvote/downvote 버튼 아래의 흰색 체크 표시를 클릭하여 수락 한 답변 (옆에 녹색 확인 표시가 있음)으로 선택해야합니다. – LJNielsenDk

답변

5

이 작업을 수행하기 위해 파이썬을 사용할 필요는 없습니다. 유닉스 환경을 사용하는 경우, 명령 행에서 바로 fgrep을 사용하고 출력을 다른 파일로 재지 정할 수 있습니다.

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

윈도우에서 당신은 사용할 수 있습니다 : 파이썬에서

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

빠른 답장을 보내 주셔서 감사합니다.이 경우 Windows를 사용하고 있습니다. 이상적인 방법은 명령 줄에서 직접 한 줄만 내보내는 것입니다. 하지만 지금은 모든 것을 텍스트 파일로 내보낼 수 있습니다. 그런 다음 텍스트 파일에서 그 한 줄을 추출하여 파일을 만들 수있는 방법을 찾으십시오. –

+0

@BrianLeeJones Windows 명령 줄 솔루션을 추가했습니다.앞으로는 사용중인 플랫폼을 지정하십시오. –

+1

죄송합니다. 이제 막 코딩 작업을 시작했고 명령 줄은 Windows에만 적용됩니다. 이 코드는 완벽하고 쉽게 필요한 것을 수행합니다. 정말 고마워요! –

1

당신이 이런 식으로 뭔가를 할 수 있습니다

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

나는 이것을 테스트 해 보지 않았다 그러나 나는 그것이 작동 거라고 생각합니다. 더 나은 해결책이 있는지 확실하지 않습니다.

0

내 보낸 파일의 정확한 구문에 대해서는 잘 모르겠지만 파이썬의 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

2

당신은 명령 줄 유틸리티가 어떤 정보를 "표시"한다고 언급하고 있으므로 stdout으로 인쇄 할 수 있습니다. 따라서 한 가지 방법은 Python 내에서 유틸리티를 실행하고 출력을 캡처하는 것입니다. 그 (임시 이름으로 가능)을 다운로드 urllib.urlretrieve를 사용할 수 있도록 한 후, 임시 파일에 util을 명령 줄을 실행 -

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 

이것은 "다운로드 위치를 사용 파이썬의"와 잘 맞지한다 세부 정보를 얻으려면 smtplib에 이메일을 보내십시오.