【问题标题】:how to find specific string with a substring python如何使用子字符串python查找特定字符串
【发布时间】:2014-04-15 10:52:11
【问题描述】:

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

不同之处在于我不知道我的“mystr”是什么。我知道我的子字符串,但我在输入文件中的字符串可以是任意数量的随机单词,但我知道其中一个单词包括子字符串 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

当我不知道我的“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")])

和第一个.csv:

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

打印出来

new_cola
""
""

什么时候打印出来

new_cola
1
2

【问题讨论】:

  • first.csv:mean 中的这些数字是什么意思?他们是想要的结果吗?
  • 你应该解释一下你是如何得到mystr的,为什么你期望在“新可乐”下有1,2。
  • 当你打电话给headers1("cola")时,当然 "cola" in name; name == "cola"!我认为你需要重新考虑你的方法。尝试查看rows 中的实际内容。 mystr 只是一个填充变量 - 它是您尝试处理的任何字符串,在本例中为 name

标签: python string substring


【解决方案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
    

【讨论】:

  • 谢谢,这很有帮助,但是如果我有 2 个过滤器呢?对于阅读器中的行: writer.writerow(list(filter_cola(row)), list(filter_fanta(row))) 它给了我错误(writerow 只需要 1 个参数)。我在这里不明白什么?
  • writer.writerow(list(filter_cola(row)) + list(filter_fanta(row))) - 你必须用+连接两个返回的列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多