我和这个家伙有类似的问题: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
答案 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