Python 读取压缩数据会得到不同的结果

Python 读取压缩数据会得到不同的结果,python,numpy,Python,Numpy,我正在使用genfromtxt来读取数据 genfromtxt也必须适用于.gz文件,但似乎不行 使用简单数据(不是.gz文件) 文件内容为: @HWI ABCDE + @HWI7 EFSA + ???=AF GTEY@JF GVTAWM 上述代码的输出为: ['@HWI' 'ABCDE' '+' '@HWI7' 'EFSA' '+' '???=AF' 'GTEY@JF' 'GVTAWM'] <type 'numpy.nd

我正在使用genfromtxt来读取数据

genfromtxt也必须适用于.gz文件,但似乎不行

使用简单数据(不是.gz文件)

文件内容为:

 @HWI
    ABCDE
    +
    @HWI7
    EFSA
    +
    ???=AF
    GTEY@JF
    GVTAWM
上述代码的输出为:

['@HWI' 'ABCDE' '+' '@HWI7' 'EFSA' '+' '???=AF' 'GTEY@JF' 'GVTAWM']
<type 'numpy.ndarray'>
其中:

[ ' @HWI\n    ABCDE\n    +\n    @HWI7\n    EFSA\n    +\n    ???=AF\n    GTEY@JF\n    GVTAWM']
<type 'numpy.ndarray'>
['@HWI\n ABCDE\n+\n@HWI7\n EFSA\n+\n???=AF\nGTEY@JF\n GVTAWM']
更接近初始值,但仍然不起作用(无法继续计算)


如何实现相同的结果?

来自文档:

genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None)
    Load data from a text file, with missing values handled as specified.

    Each line past the first `skip_header` lines is split at the `delimiter`
    character, and characters following the `comments` character are discarded.

    Parameters
    ----------
    fname : file or str
        File, filename, or generator to read.  If the filename extension is
        `.gz` or `.bz2`, the file is first decompressed. Note that
        generators must return byte strings in Python 3k.
然后在python中:

>>> import numpy as np
>>> np.genfromtxt('./test.txt', dtype=str)
array(['@HWI', 'ABCDE', '+', '@HWI7', 'EFSA', '+', '???=AF', 'GTEY@JF',
       'GVTAWM'],
      dtype='<U7')
>>> np.genfromtxt('./test.txt.gz', dtype=str)
array(['@HWI', 'ABCDE', '+', '@HWI7', 'EFSA', '+', '???=AF', 'GTEY@JF',
       'GVTAWM'],
      dtype='<U7')
>>将numpy作为np导入
>>>np.genfromtxt('./test.txt',dtype=str)
数组(['@HWI',ABCDE','+','@HWI7','EFSA','+','???=AF','GTEY@JF',
“GVTAWM”],

文档中的dtype=':

genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None)
    Load data from a text file, with missing values handled as specified.

    Each line past the first `skip_header` lines is split at the `delimiter`
    character, and characters following the `comments` character are discarded.

    Parameters
    ----------
    fname : file or str
        File, filename, or generator to read.  If the filename extension is
        `.gz` or `.bz2`, the file is first decompressed. Note that
        generators must return byte strings in Python 3k.
然后在python中:

>>> import numpy as np
>>> np.genfromtxt('./test.txt', dtype=str)
array(['@HWI', 'ABCDE', '+', '@HWI7', 'EFSA', '+', '???=AF', 'GTEY@JF',
       'GVTAWM'],
      dtype='<U7')
>>> np.genfromtxt('./test.txt.gz', dtype=str)
array(['@HWI', 'ABCDE', '+', '@HWI7', 'EFSA', '+', '???=AF', 'GTEY@JF',
       'GVTAWM'],
      dtype='<U7')
>>将numpy作为np导入
>>>np.genfromtxt('./test.txt',dtype=str)
数组(['@HWI',ABCDE','+','@HWI7','EFSA','+','???=AF','GTEY@JF',
“GVTAWM”],

dtype='为什么不对
gzip.open()中的file对象使用
genfromtxt

编辑

numpy
.gz
.bz2
文件使用预定义的文件开启器。您可以检查如下配置:

import numpy.lib._datasource as DS
DS._file_openers._load()
print(DS._file_openers._file_openers)
在我的机器上,这显示了bz2和gz文件的处理程序:

{'.bz2': <type 'bz2.BZ2File'>, None: <built-in function open>, '.gz': <function open at 0x7efca562a6e0>}
{.bz2':,无:,'.gz':}

由于gz文件的处理程序实际上是
gzip.open
,所以numpy在您的机器上不使用它似乎很奇怪。

为什么不将
genfromtxt
gzip.open()中的file对象一起使用呢

编辑

numpy
.gz
.bz2
文件使用预定义的文件开启器。您可以检查如下配置:

import numpy.lib._datasource as DS
DS._file_openers._load()
print(DS._file_openers._file_openers)
在我的机器上,这显示了bz2和gz文件的处理程序:

{'.bz2': <type 'bz2.BZ2File'>, None: <built-in function open>, '.gz': <function open at 0x7efca562a6e0>}
{.bz2':,无:,'.gz':}


由于gz文件的处理程序实际上是
gzip.open
,numpy在您的机器上不使用它似乎很奇怪。

为什么不将
genfromtxt
gzip.open()
中的file对象一起使用呢?您尝试过
gzip.open(“file”,“rt”)了吗
?通过解除
gzip。打开binary@MutationalMeltdown当前位置我刚试过。仍然是same@resi:是的!就是这样!谢谢!请回答!为什么不对
gzip.open()中的file对象使用
genfromtxt
?您尝试过
gzip.open(“file”、“rt”)吗
?通过解除
gzip。打开binary@MutationalMeltdown当前位置我刚试过。仍然是same@resi:是的!就是这样!谢谢!请回答!我刚刚在这里试过,它对我有效,我将编辑我的答案以显示如何。嗯……我刚刚找到它对我无效的原因。我必须删除这行
f=open('file','r'))
然后它就如你所说的那样起作用了!(我选择了答案,这就是我投票给你的原因,谢谢!)如果你想根据删除行更新你的答案。我刚刚在这里尝试过,它对我有效,我将编辑我的答案以显示如何。嗯……我刚刚找到了它对我无效的原因。我必须删除这行
f=open('file',r')
然后它就如你所说的那样起作用了!(我选择了答案,这就是为什么我投票给你,谢谢!)如果你想根据删除行更新你的答案。即使这是一个简单的解决方法,它也会让你负责处理文件扩展名/文件类型。
numpy.genfromtxt
应该像@rectummelancolique指出的那样工作,并且会透明地为你这样做。我编辑我的答案是为了指出numpy文件的开头。你可以吗是否弄乱了PYTHONPATH或sys.path?:否,请查看我对rectummelancolique答案的评论。
f=open('file','r'))
是问题所在,即使这是一个简单的解决方法,它也让你负责处理文件扩展名/文件类型。
numpy.genfromtxt
应该像@rectummelancolique指出的那样工作,并且可以透明地为你做。我编辑了我的答案,指出numpy文件的开头。你可能弄乱了PYTHONPATH或sys吗.path?:否,请查看我对rectummelancolique答案的评论。
f=open('file','r')
是问题所在
{'.bz2': <type 'bz2.BZ2File'>, None: <built-in function open>, '.gz': <function open at 0x7efca562a6e0>}