用Python在csv中用该字符串的中间部分替换一个字符串

时间:2018-09-21 17:32:25

标签: python

我正在尝试替换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的脚本中实现此功能时,该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中获得了匹配。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

使用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')