python读取txt加号分隔符_Python读取具有不同分隔符的数据文本文件

这篇博客探讨了如何使用numpy的genfromtxt函数解析含有多种分隔符和混合数据类型的数据字符串。通过自定义分隔符替换函数和结构化数组的dtype,可以有效地将复杂的数据拆分成整数、浮点数和字符串。尽管genfromtxt在处理复杂数据时可能不如pandas的csv阅读器快,但对于特定情况,它提供了足够的灵活性。
摘要由CSDN通过智能技术生成

In [280]: txt=[' 0 : 16, 250 : 1 : 0.053 :RIG : DIS : 1 : 48, 220; 2

...: : 42, 241; 2 : 43, 251; 3 : 25, 266; 1 : 36, 287; 2 '

...: ]

In [282]: np.genfromtxt(txt,delimiter=':',dtype=None, encoding=None)

Out[282]:

array((0, ' 16, 250 ', 1, 0.053, 'RIG ', ' DIS ', 1, ' 48, 220; 2 ', ' 42, 241; 2 ', ' 43, 251; 3 ', ' 25, 266; 1 ', ' 36, 287; 2'),

dtype=[('f0', '

这是一个有11个字段的结构化数组,它混合了整数、字符串和浮点数。这是因为dtype=None告诉它为每个列推断数据类型。在

在,上拆分将生成一个7列数组(这里是1d,因为只有一个输入行,但是如果有更多的输入行,则是2d):

^{pr2}$

但请注意,这都是弦乐。在

genfromtxt不接受多个分隔符,但它接受来自任何为其提供行的输入。在

因此,如果我定义一个替换分隔符的函数:In [285]: def foo(astr):

...: return astr.replace(':',',').replace(';',',')

...:

...:

In [286]: np.genfromtxt([foo(a) for a in txt],delimiter=',',dtype=None, encoding

...: =None)

Out[286]:

array((0, 16, 250, 1, 0.053, 'RIG ', ' DIS ', 1, 48, 220, 2, 42, 241, 2, 43, 251, 3, 25, 266, 1, 36, 287, 2),

dtype=[('f0', '

现在我已经将输入分解成一个有23个字段的结构化数组,同样是int、float和(更小)字符串的混合。在

genfromtxt让我定义一个dtype,它可以将子字段组合在一起。在

例如,尝试处理前6列:In [298]: dt = np.dtype([('f0','i'),('f1','i',2),('f2','i'),('f3','i'),('f4','U3

...: ')])

In [299]: np.genfromtxt([foo(a) for a in txt],delimiter=',',dtype=dt, encoding=N

...: one,usecols=range(6))

Out[299]:

array((0, [ 16, 250], 1, 0, 'RIG'),

dtype=[('f0', '

我已经将'16,250'分组到一个包含2个整数的字段中。后来的“48220;2,42241;2”可以嵌套3个字段(由“;”定义),并嵌套在2,2和1子字段中。在

genfromtxt接受另一种形式的定界符-固定字段宽度。在

速度方面,genfromtxt并没有比你自己的滚动有任何改进。它仍然需要读取每一行,将其拆分,并将值收集到一个列表列表中。最后它将其转换为一个数组。在

pandas有一个更快的csv读卡器,但这种情况可能太复杂而无法使用。engine=python参数强制它使用较慢的全python版本。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值