【问题标题】:cell content with regex in csv file using python使用python在csv文件中使用正则表达式的单元格内容
【发布时间】:2015-12-13 19:09:12
【问题描述】:

我有一个 csv 文件,例如=>

apple, 23, 45 
abricot, 45 12
grape,  123 985
apple, 18, 450

我想通过标识符获取行,例如从苹果行获取.. 这是我的代码:

import csv
import re
exampleFile=open('test-csvred.csv')
exampleReader = csv.reader(exampleFile)
for row in exampleReader:
    a=str(row)
    print ('Row #' + str(exampleReader.line_num)+' ' +a)
    t=re.match("apple(.*)",a).group(1)

代码给了我=> NoneType'对象没有属性'group' 我真的不知道我的错误是什么...... 提前致谢

【问题讨论】:

  • 如果你想要一个字符串,为什么要使用 csv 库?发布实际内容的样子以及您期望的输出结果
  • re.match 只搜索字符串开头的匹配项。试试re.search
  • re.search 给了我同样的错误信息。
  • 我使用 csv 是因为我需要这些文档来编辑内容。我想从苹果开始的每个时间线中提取第三个单元格的 int

标签: python regex csv


【解决方案1】:

您的代码基本上是在做str.startswith 可以做的事情:

with open("in.txt") as f:
    for line in f:
        if line.startswith("apple"):
            print(line)

除非每一行都以"apple" 开头,否则您的代码显然会失败,因为matchsearch 将在没有匹配项时返回None。您的csv 文件似乎也很乱,有不同数量的空格和缺少逗号,因此不适合由csv 库解析。

如果你也想要行号,请使用enumerate:

with open("in.txt") as f:
    for ind, line in enumerate(f, 1):
        if line.startswith("apple"):
            print(line)

【讨论】:

  • @user2216280,不用担心,这基本上可以完成您自己的代码试图做的事情。如果您需要拆分数据,您可以使用 str.split 和 str.rstrip
  • for ind, line in enumerate(f, 1): 似乎没有给出startswith函数为真的行号...
  • 是的,只需将ind 添加到打印中,print(ind, line)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2021-11-19
  • 1970-01-01
  • 2015-04-26
相关资源
最近更新 更多