Python 读取压缩数据会得到不同的结果
我正在使用genfromtxt来读取数据 genfromtxt也必须适用于.gz文件,但似乎不行 使用简单数据(不是.gz文件) 文件内容为: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
@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>}