Заменить строку с средней частью этой строки в CSV с Python

1

Я пытаюсь заменить строку в первом столбце 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. Любая помощь будет принята с благодарностью. Благодарю.

  • 0
    enter code here ?
  • 1
    re.search вернет None если совпадений не найдено, поэтому я предполагаю, что некоторые ваши данные не соответствуют вашему регулярному выражению.
Показать ещё 3 комментария
Теги:

1 ответ

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')
  • 0
    Спасибо @ Данило-Соуза-Мораес
  • 0
    если это ответило на ваш вопрос, можете ли вы принять его?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню