0

我写了一些在 Linux 机器上运行良好但不能在 Windows 上运行的代码。

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) 检查它时,它返回 true。任何有关如何修改此代码以便它在 Python 2 和 3 以及 Windows 和 Linux 上工作的建议都将不胜感激。

4

1 回答 1

0

此消息仅意味着一件事:找不到可执行文件。

这与您的数据文件无关,因为该过程甚至没有运行。

为什么会这样?因为虽然zgrep是 Linux 上的标准,但它是 Windows 上的第三方端口,所以你必须先从这里安装它

请注意,如果您只想在 csv 文件上 grep 字符串,则使用zgrep. csv使用本机 python 方法、读取行(或行,使用模块)和匹配模式要好得多。您甚至可以.gz本地打开文件。那么它就真的是便携的了。

于 2017-09-29T19:17:32.997 回答