首页 > 解决方案 > 用Python用csv中该字符串的中间部分替换一个字符串

问题描述

我正在尝试替换 csv 第一列中的字符串并且遇到了一些问题,即“AttributeError:NoneType 对象没有属性组”错误。当使用这样的代码作为测试时,一切正常。
```

import re

array = [['aaa-bbb-ccc_dddL_eee_V00T00000-00_00000_V00T00000-00_00000_ACK_00000000.XML', '907 ', 'Sep 13 2018  18:07', ' '], ['V11T11111-11_11111_V11T11111-11_11111_ACK_11111111.XML', '875','Jan 31 2018  00:00',' ']]

print(array, end='\n\n')

for item in array:
    m = re.search(r'(\D\d+\D\d+\-\d+)', item[0])
    print(m.group(),end='\n\n')
    item[0] = m.group()
    print(item,end='\n\n')

```

但是,当尝试在打开一个 csv 的脚本中实现这一点时,该脚本将具有类似结构的数组(数组中只有更多数组),我收到 NoneType 错误。

```

with open('./input.csv', 'r') as f:
    reader = csv.reader(f)
    for row in read`enter code here`er:
        m = re.search(r'(\D\d+\D\d+\-\d+)', row[0])
        row[0] = m.group()

```

我不太清楚为什么第二个实现不起作用,因为我确实在 csv 中得到了匹配项。任何帮助将不胜感激。谢谢。

标签: python

解决方案


使用 re.search 时,如果找不到匹配项,则该函数返回 None ,当发生这种情况时,您的代码将转换为 None.group() ,这是您看到的错误。要解决此问题,请先检查搜索是否找到任何内容:

import re

array = [['aaa-bbb-ccc_dddL_eee_V00T00000-00_00000_V00T00000-00_00000_ACK_00000000.XML', '907 ', 'Sep 13 2018  18:07', ' '], ['V11T11111-11_11111_V11T11111-11_11111_ACK_11111111.XML', '875','Jan 31 2018  00:00',' ']]

print(array, end='\n\n')

for item in array:
    m = re.search(r'(\D\d+\D\d+\-\d+)', item[0])
    if m:
        print(m.group(),end='\n\n')
        item[0] = m.group()
        print(item,end='\n\n')

推荐阅读