Python在CSV中搜索字符串并将行输出到新的csv

时间:2018-01-02 03:41:03

标签: python csv search

*请注意我是Python的新手....

我正在尝试为大型CSV文件编写脚本。 我的目的是搜索(如grep)CSV的第二列,找到包含字符串的复杂短语,然后是特殊字符,然后整数例如“Mainbalance-7-0”或“Mainbalance-8-0”

字符串始终为'Mainbalance'。

特殊字符始终为“ - ”。

整数更改。

如果找到了短语,我想将整行输出到新csv 文件。

我已经在这里查看了其他答案,但无法找到具体内容。

输入如下:

  

BAL,04,PSMS-5-13,0,铲斗,WORD

     

BAL,03,Mainbalance-6-0,36,MAIN,WORD

     

BAL,020,PLUSC-122-0,36,MAIN,WORD

     

BAL,05,Mainbalance-7-0,36,MAIN,WORD

输出为:

  

BAL,03,Mainbalance-6-0,36,MAIN,WORD

     

BAL,05,Mainbalance-7-0,36,MAIN,WORD

我试过以下......

with open("D:/Temp/input.csv", 'rb') as f, open('D:/Temp/output.csv','wb') as outf:
    writer = csv.writer(outf, delimiter=',')
    reader = csv.reader(f)
    for line in f:
        if 'Mainbalance*' in line:
            writer.writerow(line)

创建的文件打印为NO结果。

2 个答案:

答案 0 :(得分:0)

你应该迭代reader对象,正如斯蒂芬在评论中指出并检查每行的第三列。然后,如果检查以Mainbalance开头的列值是否足够可靠,则可以使用str.startswith()

for line in reader:
    if line[2].startswith("Mainbalance"):
        writer.writerow(line)

或者,如果需要更详细的检查,我们可以创建一个正则表达式模式,如Mainbalance-\d+-\d+,其中\d+将匹配一个或多个数字:

import re

# ...

pattern = re.compile(r"Mainbalance-\d+-\d+")
for line in reader:
    if pattern.match(line[2]):
        writer.writerow(line)

答案 1 :(得分:0)

由于' Mainbalance *'代码不起作用。不是正则表达式

if 'Mainbalance*' in line: # resolves to false, as * is not in the string.

通过删除星标更改代码,然后代码可以正常运行。

if 'Mainbalance' in line: # star is removed