将数据从字符串转换为数据表

时间:2017-03-14 10:50:19

标签: python arrays string python-2.7 datatable

我有一个看起来像这样的字符串:

  

MSG,4,111,11111,8963C4,111111,2017 / 03 / 14,10:38:27.036,2017 / 03 / 14,10:38:27.052 ,,, 524140 ,,, 64 ,,,,, 0   MSG,8,111,11111,4B199E,111111,2017 / 03 / 14,10:38:27.039,2017 / 03 / 14,10:38:27.053 ,,,,,,,,,,,, 0   MSG,5,111,11111,4631CC,111111,2017 / 03 / 14,10:38:27.039,2017 / 03 / 14,10:38:27.053,43000 ,,,,,,, 0,...,0,0   MSG,5,111,11111,502CC6,111111,2017 / 03 / 14,10:38:27.041,2017 / 03 / 14,10:38:27.053,41000 ,,,,,,, 0,...,0,0   MSG,5,111,11111,3C66B0,111111,2017 / 03 / 14,10:38:27.042,2017 / 03 / 14,10:38:27.053,36975 ,,,,,,, 0,...,0,0   MSG,8,111,11111,4B16BB,111111,2017 / 03 / 14,10:38:27.045,2017 / 03 / 14,10:38:27.102 ,,,,,,,,,,,, 0

我想将此字符串中的数据放入具有多行和列的表或数组中。我想用','分隔数据,如果我有一个文件,我知道怎么做,但在这种情况下,没有文件,只有一个字符串。

我首先尝试按行分隔字符串:

lines = data1.split("\n")

虽然有效,但是当我试图用','这样的列表分隔列表时:

lines.split(',')

它给了我以下错误:

  

AttributeError:'list'对象没有属性'split'

是否有命令来列出列表或从列表中创建数据表或数组?

4 个答案:

答案 0 :(得分:2)

使用后

lines = data1.split("\n")

lines是一个列表,函数split用于字符串。

因此,如果您想将其应用于特定字符串,您可以使用索引并应用split(),例如

lines[0].split(',')

创建一个表或列表列表,您可以在行列表上循环,然后再次应用拆分。

答案 1 :(得分:1)

你可以试试,

import re 
a = 'MSG,4,111,11111\naa,bb'  #store your entire string here
print(re.split(' |,|\n', a)) # this will give you the list 

答案 2 :(得分:0)

据我所知,你希望在,出现时拆分每一行。如果是这样,您可以使用

lines = data1.split('\n')  # list of strings
step2 = [line.split(',') for line in lines]  # split every string in that list,
                                             # this gives a list of lists of strings

这会为您提供一个列表列表:“子列表”step2[n]包含在每次lines[n]出现时分割,时得到的字符串。这包含一些空字符串,因为您的示例有几个连续的逗号。

如果要将列表列表展平以获得列表,可以使用

step3 = [item for sublist in step2 for item in sublist]  # flatten that list

答案 3 :(得分:0)

在@shahs的帮助下,我能够得到我需要的东西。

这就是代码的样子,虽然它可能不是最好的但它仍然有效:

lines = data1.split("\n")
myarray = np.asarray(lines)
array = np.zeros(shape=(len(lines),22))
array=array.astype('str')

for i1 in range(len(lines)):
  for i2 in range(len(array[0])):
        data3=lines[i1].split(',')
        array[i1,i2]=data3[i2]