【问题标题】:Need to create an array of arrays for each string需要为每个字符串创建一个数组数组
【发布时间】:2018-12-12 08:11:47
【问题描述】:

所以我的数据看起来像这样:

>> print data
"12345","string1","string2","string3","string4","string5"
"67890","string6","string7","string8","string9","string10"

我希望能够将每一行作为一个数组放入一个数组中。所以最后,我希望它看起来像这样:

>> print array_data
[["12345","string1","string2","string3","string4","string5"],
["67890","string6","string7","string8","string9","string10"]]

我已经尝试了一些东西,这是我得到的最接近的:

>> temp_list = []
>> for line in data.splitlines(): temp_list.append([line])
>> print temp_list
[['"12345","string1","string2","string3","string4","string5"'],
['"67890","string6","string7","string8","string9","string10"']]

我在每个数组周围都得到了那个单引号。我应该如何继续获得我正在寻找的结果?

提前致谢!

【问题讨论】:

标签: python arrays string python-2.7 split


【解决方案1】:

您可以使用astsplit

设置

import ast
d = '''
"12345","string1","string2","string3","string4","string5"
"67890","string6","string7","string8","string9","string10"
'''
templist=[]

那么就

for line in d.strip().splitlines(): 
    templist.append([ast.literal_eval(st) for st in line.split(',')])
    

请注意,您也可以使用列表推导式制作单行器

templist = [[ast.literal_eval(st) for st in line.split(',')] for line in d.strip().splitlines()]

【讨论】:

    【解决方案2】:

    使用熊猫:

    import pandas as pd
    
    d = '''\
    "12345","string1","string2","string3","string4","string5"
    "67890","string6","string7","string8","string9","string10"'''
    
    l = pd.read_csv(pd.compat.StringIO(d), header=None, dtype='object').values
    

    你有 l:

    [['12345', 'string1', 'string2', 'string3', 'string4', 'string5'],
     ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
    

    【讨论】:

      【解决方案3】:

      使用标准库中的csvio 模块:

      import csv
      from io import StringIO
      
      d = '''"12345","string1","string2","string3","string4","string5"
      "67890","string6","string7","string8","string9","string10"'''
      
      res = list(csv.reader(StringIO(d)))
      
      print(res)
      
      [['12345', 'string1', 'string2', 'string3', 'string4', 'string5'],
       ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
      

      【讨论】:

        【解决方案4】:

        给定:

        >>> data
        '"12345","string1","string2","string3","string4","string5"\n"67890","string6","string7","string8","string9","string10"'
        

        您可以这样做(如果' 没有另外指明可能包含, 的csv 字段!):

        >>> [line.replace('"','').split(',') for line in data.splitlines()]
        [['12345', 'string1', 'string2', 'string3', 'string4', 'string5'], ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
        

        或者您可以使用csv 正确处理字段中的逗号:

        >>> import csv
        >>> [list(e) for e in csv.reader(data.splitlines())]
        [['12345', 'string1', 'string2', 'string3', 'string4', 'string5'], ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
        

        【讨论】:

          【解决方案5】:

          你快到了。

          >> temp_list = []
          >> temp_list = [list(eval(line)) for line in data.splitlines()]
          >> print temp_list
          [['12345', 'string1', 'string2', 'string3', 'string4', 'string5'], ['67890', 'string6', 'string7', 'string8', 'string9', 'string10']]
          

          【讨论】:

          • 如果您对某个答案投了反对票,请同时说明原因。
          猜你喜欢
          • 2023-03-16
          • 2019-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-03
          • 1970-01-01
          • 2010-11-06
          相关资源
          最近更新 更多