2017-09-29 3 views
0

리눅스 컴퓨터에서는 잘 작동하지만 윈도우에서는 실행되지 않는 코드를 작성했습니다.파이썬 subprocess.check_output 창문으로 변환하기

import subprocess 
import pandas as pd 
try: 
    from StringIO import StringIO 
except ImportError: 
    from io import StringIO 

def zgrep_data(f, string='', index='TIMESTAMP'): 
    if string == '': 
     out = subprocess.check_output(['zgrep', string, f]) 
     grep_data = StringIO(out)  
     data= pd.read_csv(grep_data, sep=',', header=0) 

    else: 
     col_out = subprocess.check_output(['zgrep', index, f]) 
     col_data = StringIO(col_out) 
     columns = list(pd.read_csv(col_data, sep=',')) 

     out = subprocess.check_output(['zgrep', string, f]) 
     grep_data = StringIO(out)  
     data= pd.read_csv(grep_data, sep=',',names=columns, header=None) 

    return data.set_index(index).reset_index() 

내가 오류를 받고 있어요 : 는 FileNotFoundError : [WinError 2] 시스템은 내가 os.path.exists (FILE_PATH)으로 그것을 확인하면 파일이

지정 찾을 수 없습니다, 그건 사실 반환 . 이 코드를 수정하여 Python 2 & 3과 Windows 및 Linux에서 모두 작동하도록하는 방법에 대한 조언을 얻을 수 있습니다.

+0

'zgrep'이 경로에 없습니다. 이것은 표준 Windows 명령이 아니므로 Windows 버전을 찾아서 설치해야합니다 ... 오류에 대한 유일한 설명입니다. 어떤 파일을 확인하고 있습니까? 'file_path'는 무엇입니까? –

+0

파일이 내 C 드라이브에 있습니다. C : /Users/Chris/Documents/massivefile.csv –

+0

따라서 파일 경로는 f –

답변

0

이 메시지는 실행 파일을 찾을 수 없다는 것을 의미합니다.

프로세스가 실행되지 않아 데이터 파일과 아무 관련이 없습니다.

왜 그럴까요? zgrep 리눅스 표준이지만, Windows에서 타사 포트, 그래서 당신은 CSV 파일에 문자열을 grep을하려는 경우, 그것은 zgrep을 사용하는 과도하다는 here

주에서 먼저 설치해야하기 때문이다. 네이티브 파이썬 방식을 사용하거나, 행 (또는 행, csv 모듈 사용) 및 패턴 일치를 읽는 것이 훨씬 낫습니다. 심지어 .gz 개의 파일을 열 수 있습니다. 그렇다면 은 정말입니다.