【问题标题】:Python search for a string in a CSV and output row to a new csvPython 在 CSV 中搜索字符串并将行输出到新的 csv
【发布时间】:2018-01-02 03:41:03
【问题描述】:

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

我正在尝试为大型 CSV 文件编写脚本。 我的目标是在 CSV 的第二列中搜索(如 grep)一个复杂的 短语,其中包含一个 string,后跟一个 special character 和然后 整数 例如“Mainbalance-7-0”或“Mainbalance-8-0”

字符串始终为“Mainbalance”。

特殊字符总是“-”。

整数变化。

如果找到该短语,我想将整行输出到一个新的 csv 文件。

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

输入看起来像:

BAL,04,PSMS-5-13,0,BUCKET,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)

创建的文件没有打印任何结果。

【问题讨论】:

  • 你不应该从f阅读,你应该从reader阅读。
  • 当然!对不起-我的错误-感谢您的帮助
  • @pippy5 将 f 更改为 reader 无法完全解决您的问题,这是问题的一部分 - 对于输入 csv 中所有显示的行,'Mainbalance*' in line 仍然是错误的。
  • 是的,谢谢 alecxe。现在试试下面的代码。

标签: python csv search


【解决方案1】:

正如斯蒂芬在 cmets 中指出的那样,您应该遍历 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)

【讨论】:

  • @pippy5,如果此答案解决了您的问题,您应该通过单击投票计数器下方的勾号(答案左侧)将其标记为 "chosen"。它会告诉其他遇到这个问题的用户该解决方案有效,它会给你代表。点,它会给回答代表的人。点...大家开心! :-) 见:meta.stackexchange.com/q/5234
【解决方案2】:

代码不起作用,因为“Mainbalance*”不是正则表达式

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

通过去掉星号来更改代码,然后代码就可以工作了。

if 'Mainbalance' in line: # star is removed

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 2013-06-26
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多