numpy 按字符数分隔

vd8tlhqk  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(74)

我正在尝试分隔一个没有空格的2D数组。应该有88列和148行。但现在它只有148行。第一行没有任何数字,看起来像这样:


的数据
但有些行的数字是这样的:*************************************************************************************************************************************************308. 308 308 308 308 308 308 308.
我们的目标是每隔7个字符分隔一行,形成88列。对于上面的每一行,前两个断点理想地看起来像这样:



当它到达我分享的第二行的数字时,它应该看起来像这样:
'**','308.'
(如果308前面的空格或后面的句点丢失,这并不重要)
到目前为止,我已经尝试了以下方法,文件名为. txt,其中包含2D数组。

import numpy as np

a = input('Enter file name: \n')
a = np.loadtxt(a, dtype = 'i', delimiter = '\t')
b = [a[i:i+3] for i in range(0, len(a), 3)]

字符串
但我得到了以下信息:
ValueError:无法将字符串转换为float:'****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************'
我觉得这可能是一个简单的解决办法,但我一直在旋转我的车轮上。救命啊!

mlmc2os5

mlmc2os51#

我把你的问题读了几遍,我不太清楚你想要什么。你可能需要改写你的问题,并给予更具体和完整的例子。
如果我对您的问题理解正确的话,您希望读入一个文本文件,并将行拆分为7个字符的块(尽管您的示例“308.”不是7个字符长)。Numpy不是解决这个问题的理想包。你可以使用Python原生方法。

b = []
with open("temp.txt", "r") as f:
    for a in f:
        a = a.rstrip()
        b.append([a[i:i+7] for i in range(0, len(a), 7)])

字符串

rm5edbpk

rm5edbpk2#

我会在这里使用正则表达式:

import re
import numpy as np

s = '***********************************************************************************************************************************************************************************************************************************************************************************************   308.   308.   308.   308.   308.   308.   308.   308.*********************************************************************************************************************************************************************************************************************************************************************************'

out = re.findall(r'(\*{7}|[ \d.]{7})', s)

字符串

  • 注意。如果你不想要空格/点,用r'(\*{7}|\d{1,7})'作为正则表达式。

输出量:

['*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '   308.',
 '   308.',
 '   308.',
 '   308.',
 '   308.',
 '   308.',
 '   308.',
 '   308.',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******',
 '*******']

相关问题