python - 用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 中得到了匹配项。任何帮助将不胜感激。谢谢。
解决方案
使用 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')
推荐阅读
- javascript - 在 React 项目中使用现有的 cljs 组件?
- c++ - 编译和运行 CGAL 三角剖分演示
- user-interface - 在 OleContainer 中嵌入单词菜单
- c++ - 为什么在孩子被破坏后父母的方法仍然存在
- linux - 删除数据而不是使用 sed 更新?
- node.js - Ubuntu 中的 mocha 测试问题:ReferenceError: ert is not defined
- javascript - 带有 ajax 和 knpPaginatorBundle 的 symfony 过滤器
- reactjs - 在 Material UI 选项卡上渲染组件
- java - 如何使用 --module 关键字(不使用 --add-modules)启动在 NetBeans 中创建的模块化应用程序?
- java - Spring Autowire 检索到错误的类