根据模式索引CSV列

时间:2014-06-14 00:00:40

标签: python string csv replace indexing

如何从包含特定模式的列中获取索引?

例如,假设我想在此字符串中索引哪些列包含#E

,#E,D,,#E,,#,,#E,,,21#E,,#,,#DD,sd,,#,,##,

我想要一个结果:

 [1, 4, 8, 11]

到目前为止,我很困惑:

string = ',#E,D,,#E,,#,,#E,,,21#E,,#,,#DD,sd,,#,,##,'
new_string = re.sub('[^,#E]', '', string)
def positions(string, char):
    string_original = string
    list = []
    for i in range(0, len(string)):
        if string[i] == char:
            list = list + [i]
            string = string_original[i + 1:]
    return list

2 个答案:

答案 0 :(得分:1)

  1. 拆分","获取值列表而不是字符串
  2. 使用列表推导来迭代传递给枚举的列表,它返回一个元组列表,如[[0,"第一个字符串"),(1,"第二个字符串& #34;)..]
  3. 过滤包含字符串的元素并将索引放在列表中
  4. 假设yourstring包含列:

    matches = [i for i,x in enumerate(yourstring.split(',')) if "#E" in x]
    

答案 1 :(得分:1)

不确定我有没有,但这是一个想法:

  1. 将字符串拆分为,以获取字符串列表
  2. 选择与列表中的字符串匹配的索引(例如#E

  3. >>> s = ',#E,D,,#E,,#,,#E,,,21#E,,#,,#DD,sd,,#,,##,'
    >>> l = s.split(',')
    >>> [i for i in range(len(l)) if '#E' in l[i]]
    [1, 4, 8, 11]
    

    >>> filter(lambda i: '#E' in l[i], range(len(l)))
    [1, 4, 8, 11]