Я работаю с файлом .csv
и, как всегда, у него проблемы с форматированием. В данном случае это разделенная таблица ;
, но есть строка, которая иногда содержит точки с запятой, например:
code;summary;sector;sub_sector
1;fishes;2;2
2;agriculture; also fishes;1;2
3;fishing. Extraction; animals;2;2
Итак, есть три случая:
- без точки с запятой -> нет проблем
- символ слова (не числовой), точка с запятой, пробел, символ слова (не числовой)
- символ слова (не числовой), точка с запятой, 2x пробел, символ слова (не числовой)
Я превратил .csv
в .txt
, затем импортировал его в виде строки, а затем скомпилировал это регулярное выражение:
re.compile('([^\d\W]);\s+([^\d\W])', re.S)
Что следует делать. Мне почти удалось заменить эти точки с запятой на следующие:
def replace_comma(match):
text = match.group()
return text.replace(';', ',')
regex = re.compile('([^\d\W]);\s+([^\d\W])', re.S)
string2 = string.split('\n')
for n,i in enumerate(string2):
if len(re.findall('([^\d\W]);(\s+)([^\d\W])', i))>=1:
string2[n] = regex.sub(replace_comma, i)
В основном это работает, но если после точки с запятой есть два пробела, после запятой остается \xa0
. У меня есть две проблемы с этим подходом:
- Это не очень просто
- Почему он оставляет этот
\xa0
символ?
Знаете ли вы лучший способ подойти к этому?
Спасибо
Редактировать: Мой желаемый результат будет:
code;summary;sector;sub_sector
1;fishes;2;2
2;agriculture, also fishes;1;2
3;fishing. Extraction, animals;2;2
Редактировать: Добавлено объяснение о превращении файла в строку для лучшей манипуляции.