我有一个CSV
有2文件columns
,我必须match
值的单一行两列,如果我们要保持柱否则的条件相匹配delete
的整行。以下是我的csv文件的示例:
lidocaine (oint, patch) generic 1 tube of cream
lidocaine (oint, patch) generic 1 kit
lidocaine (oint, patch) generic 1 bottle of topical solution
lidocaine (oint, patch) generic 1 tube of ointment
lidocaine (oint, patch) generic 1 tube of ointment
lidocaine (oint, patch) generic 1 jar of ointment
lidocaine (oint, patch) generic 1 bottle of lotion
lidocaine hcl (gel 2%, soln 4%) generic 1 patch
在这里,除了第4行,第5行和第6行外,其他所有行将被删除。原因是:
第一行的左侧有软膏和补丁,而右侧则是乳膏,因此它将被删除。
同样,第二和第三行将被删除。
第四,第五和第六行将不会被删除,因为它们的左边有软膏,而右边有类似的词软膏。
因此,如何实现这一点,programatically
因为在删除行之前,我要匹配10多个以上类似的条件。
请任何人可以帮助我。Thnx :)
我可以提出一个Python脚本,该脚本以文件名作为命令行参数并输出整个内容,但是没有所有oint
在所有列中都没有字符串(不区分大小写)的行。
#! /usr/bin/env python3
import sys
COLUMN_SEPARATOR = " " # character or string used as column separator. Tab = "\t"
SEARCH_STRING = "oint".lower() # case-insensitive string that needs to be present in all columns
with open (sys.argv[1]) as f:
rows=[list(map(str.strip, line.split(COLUMN_SEPARATOR))) for line in f.readlines()]
for r in rows:
if all([SEARCH_STRING in r[i].lower() for i in range(len(r))]):
print(COLUMN_SEPARATOR.join(r))
复制上面的脚本并将其保存为任何文件,例如csvfilter.py
。
使用使其可执行chmod +x csvfilter.py
。
然后将其与文件一起运行以作为单个参数进行处理。
上面的示例(以3个空格分隔的列)的示例输出为source.csv
:
$ ./csvfilter.py source.csv
lidocaine (oint, patch) generic 1 tube of ointment
lidocaine (oint, patch) generic 1 tube of ointment
lidocaine (oint, patch) generic 1 jar of ointment
该脚本不会修改原始文件,而只是将新版本打印到标准输出中。另外,除设置为的字符串外,列之间的任何空白字符COLUMN_SEPARATOR
都将被丢弃。
要将原始文件替换为修改后的版本,请将输出重定向回原始文件:
$ ./csvfilter.py source.csv > source.csv
您还可以将修改后的版本另存为文件:
$ ./csvfilter.py source.csv > modified.csv
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句