如何使用numpy导入python中没有分隔符的文本文件?

如何使用numpy导入python中没有分隔符的文本文件?,python,numpy,import,Python,Numpy,Import,如何导入没有分隔符的文件 我有一个名为text.txt的文件,其中包含两行文本: 000000000 11100000000000000000000 000000000 1111111 0000000000000000 当我使用 f=打开(“text.txt”) 数据=np.loadtxt(f) 我明白了 [1.11000000e+22 1.11111100e+22] 使用sep=”“不会改变任何东西 我想得到这个结果,以许多个单位数整数的形式: [[000000000 111000000000

如何导入没有分隔符的文件

我有一个名为
text.txt
的文件,其中包含两行文本:

000000000 11100000000000000000000
000000000 1111111 0000000000000000

当我使用

f=打开(“text.txt”)
数据=np.loadtxt(f)

我明白了

[1.11000000e+22 1.11111100e+22]

使用
sep=”“
不会改变任何东西

我想得到这个结果,以许多个单位数整数的形式:

[[000000000 111000000000000000]
[000000000 1111111 0000000000000000]]

感谢您的帮助


更新:感谢大家为一个棘手的问题提供了出色的答案和许多有效的解决方案。

如果你不给numpy任何指导,它必须猜测你想要的类型

如果您的数据看起来像十进制格式的整数,它将尝试以这种方式解释它们,并将它们放入int32。但是
000000000 11100000000000000
(显然等于
111000000000000000
)需要74位,所以这不起作用。因此,它转而将它们存储在
float64


如果您没有意识到1.11E22与11100000000000000的含义相同,您需要仔细阅读。1.11E22是Python(和C以及许多其他编程语言)1.11*10**22的快捷方式。无论如何,你得到科学记数法的原因是
float64
数组的默认打印输出是
%g
-style,意思是“简单记数法如果
-4如果你不给numpy任何指导,它必须猜测你想要的类型

如果您的数据看起来像十进制格式的整数,它将尝试以这种方式解释它们并将它们放入int32。但是
000000000 111000000000000000
(这显然等于
111000000000000000
)需要74位,所以这不起作用。因此,它会返回到将它们存储在
float64


如果您没有意识到1.11E22与11100000000000000的含义相同,那么您需要仔细阅读。1.11E22是Python(以及C和许多其他编程语言)1.11*10**22的快捷方式。无论如何,您获得科学记数法的原因是
float64
数组的默认打印输出是
%g
-style,意思类似于“如果
-4简单记数法如果我理解正确,请尝试以下操作:

a = np.loadtxt('text.txt', dtype=np.character)
a = np.array(map(lambda x: map(int, x), a))
输出:

[[0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

这个解决方案有点愚蠢,虽然它无法使用
np.loadtxt
,但有时我们只是想让事情正常运行。

如果我理解正确,请尝试以下方法:

a = np.loadtxt('text.txt', dtype=np.character)
a = np.array(map(lambda x: map(int, x), a))
输出:

[[0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
这个解决方案有点愚蠢,虽然它无法使用
np.loadtxt
,但有时我们只是想让事情正常运行。

我会用“我希望得到这个结果,以许多个单位数整数的形式:”这句话,并忽略它后面的样本格式(看起来只是两个整数,而不是许多个单位数整数)。可以使用参数
delimiter=1
dtype=int
来实现这一点。当
delimiter
是整数或整数序列时,这些值将被解释为包含固定宽度数据字段的文件的字段宽度

例如:

In [15]: genfromtxt('text.txt', delimiter=1, dtype=int)
Out[15]: 
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
我将使用“我想得到这个结果,以许多个单位数整数的形式”这句话,并忽略它后面的样本格式(看起来只是两个整数,而不是许多个单位数整数)。您可以使用参数
delimiter=1
dtype=int
来执行此操作。当
delimiter
为整数或整数序列时,这些值将被解释为包含固定宽度数据字段的文件的字段宽度

例如:

In [15]: genfromtxt('text.txt', delimiter=1, dtype=int)
Out[15]: 
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

你到底想要什么结果?你抱怨是因为NumPy用指数表示法打印数字,还是因为它给你一个形状数组(2,)而不是(2,1)?这些应该是两个字符串还是多个单位数整数?我在抱怨,因为NumPy用指数表示法打印我的数字,因为它给了我一个形状数组(2,)而不是(2,1)!:)你似乎自相矛盾,应该有很多列还是只有一列?很多个一位数的整数意味着很多列。你到底想要什么结果?你抱怨是因为NumPy用指数表示法打印数字,还是因为它给你一个形状(2,)而不是(2,1)的数组?这些应该是两个字符串还是多个单位数整数?我在抱怨,因为NumPy用指数表示法打印我的数字,而且它给了我一个形状数组(2),而不是(2,1)!:)你似乎自相矛盾,应该有很多专栏还是只有一个?许多个单位数整数意味着许多列。