如何使用子串python查找特定字符串

时间:2014-04-15 10:52:12

标签: python string substring

我和这个家伙有类似的问题:find position of a substring in a string

不同之处在于我不知道我的“神秘”是什么。我知道我的子串,但输入文件中的字符串可以是任意顺序的随机数量的单词,但我知道其中一个单词包括substring cola。

例如csv文件:fanta,coca_cola,sprite以任何顺序。

如果我的子字符串是“cola”,那么我该如何制作一个说

的代码
mystr.find('cola')

match = re.search(r"[^a-zA-Z](cola)[^a-zA-Z]", mystr)

if "cola" in mystr

当我不知道我的“神秘”是什么时候?

这是我的代码:

import csv

with open('first.csv', 'rb') as fp_in, open('second.csv', 'wb') as fp_out:
        reader = csv.DictReader(fp_in)
        rows = [row for row in reader]
        writer = csv.writer(fp_out, delimiter = ',')

        writer.writerow(["new_cola"])

        def headers1(name):
            if "cola" in name:
                    return row.get("cola")


        for row in rows:
                writer.writerow([headers1("cola")])

和first.csv:

fanta,cocacola,banana
0,1,0
1,2,1                      

所以打印出来

new_cola
""
""

应该打印出来

new_cola
1
2

1 个答案:

答案 0 :(得分:1)

这是一个有效的例子:

import csv

with open("first.csv", "rb") as fp_in, open("second.csv", "wb") as fp_out:
        reader = csv.DictReader(fp_in)
        writer = csv.writer(fp_out, delimiter = ",")

        writer.writerow(["new_cola"])

        def filter_cola(row):
            for k,v in row.iteritems():
                if "cola" in k:
                    yield v

        for row in reader:
            writer.writerow(list(filter_cola(row)))

备注:

  • rows = [row for row in reader]是不必要且效率低下的(在这里你将生成器转换为列表,这会占用大量数据的大量内存)
  • 而不是return row.get("cola")您的意思是return row.get(name)
  • 在语句return row.get("cola")中访问当前范围之外的变量
  • 您还可以使用unix工具cut。例如:

    cut -d "," -f 2 < first.csv > second.csv