Очистить CSV от HTML-тегов можно несколькими способами, в зависимости от ваших инструментов и размера файла.
Вот основные подходы:
- Использование Python (рекомендуется для гибкости и больших файлов): Это самый надежный и гибкий способ.
import csv
import re # Для регулярных выражений
# Если нужно декодировать HTML-сущности типа , & и т.д.
# import html # Раскомментируйте, если нужно
def clean_html(raw_html):
# Удаляем HTML теги
cleanr = re.compile('<.*?>')
cleantext = re.sub(cleanr, '', raw_html)
# Опционально: декодируем HTML-сущности
# cleantext = html.unescape(cleantext)
return cleantext.strip() # .strip() удаляет лишние пробелы по краям
input_csv_file = 'input.csv'
output_csv_file = 'output_cleaned.csv'
# Укажите правильную кодировку вашего файла, если это не utf-8
encoding = 'utf-8'
# Укажите ваш разделитель, если это не запятая
delimiter = ','
try:
with open(input_csv_file, mode='r', newline='', encoding=encoding) as infile, \
open(output_csv_file, mode='w', newline='', encoding=encoding) as outfile:
reader = csv.reader(infile, delimiter=delimiter)
writer = csv.writer(outfile, delimiter=delimiter)
for row in reader:
cleaned_row = [clean_html(cell) for cell in row]
writer.writerow(cleaned_row)
print(f"Файл '{output_csv_file}' успешно создан.")
except FileNotFoundError:
print(f"Ошибка: Файл '{input_csv_file}' не найден.")
except Exception as e:
print(f"Произошла ошибка: {e}")
Как использовать:
-
Сохраните код как
clean_csv.py. -
Поместите ваш
input.csvв ту же папку. -
Запустите из командной строки:
python clean_csv.py -
Результат будет в
output_cleaned.csv. -
Если у вас другой разделитель (например,
;), изменитеdelimiter = ','. -
Если нужна раскодировка HTML-сущностей (
-> пробел,<-><), раскомментируйте строки сimport htmlиcleantext = html.unescape(cleantext). -
Использование PHP (если вы работаете в PHP-окружении):
<?php
$inputFile = 'input.csv';
$outputFile = 'output_cleaned.csv';
$delimiter = ','; // Ваш разделитель
$enclosure = '"'; // Символ обрамления полей
$escape = '\\'; // Экранирующий символ
if (($handleInput = fopen($inputFile, 'r')) !== false) {
if (($handleOutput = fopen($outputFile, 'w')) !== false) {
while (($row = fgetcsv($handleInput, 0, $delimiter, $enclosure, $escape)) !== false) {
$cleanedRow = [];
foreach ($row as $cell) {
// Удаляем HTML теги
$cleanedCell = strip_tags($cell);
// Опционально: декодируем HTML сущности
// $cleanedCell = html_entity_decode($cleanedCell, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$cleanedRow[] = trim($cleanedCell);
}
fputcsv($handleOutput, $cleanedRow, $delimiter, $enclosure, $escape);
}
fclose($handleOutput);
echo "Файл '$outputFile' успешно создан.\n";
} else {
echo "Не удалось открыть файл для записи: $outputFile\n";
}
fclose($handleInput);
} else {
echo "Не удалось открыть файл для чтения: $inputFile\n";
}
?>
Как использовать:
-
Сохраните код как
clean_csv.php. -
Поместите
input.csvв ту же папку. -
Запустите из командной строки:
php clean_csv.php -
Результат будет в
output_cleaned.csv. -
Функция
strip_tags()отлично справляется с удалением тегов. -
Если нужна раскодировка HTML-сущностей, раскомментируйте строку с
html_entity_decode(). -
Использование онлайн-инструментов (для небольших файлов, если нет возможности программировать): Существует множество онлайн-инструментов “HTML stripper” или “HTML cleaner”.
-
Вы можете скопировать содержимое ячеек (или всего файла, если он небольшой) в такой инструмент.
-
Пример: https://www.striphtml.com/ (будьте осторожны с конфиденциальными данными).
-
Этот способ менее удобен для больших CSV.
-
Использование текстового редактора с поддержкой регулярных выражений (Notepad++, Sublime Text, VS Code и т.д.):
-
Откройте CSV файл.
-
Используйте функцию “Найти и заменить” (обычно Ctrl+H или Cmd+H).
-
Включите режим регулярных выражений (regex).
-
Найти:
<[^>]+>(это выражение найдет большинство HTML-тегов). -
Заменить на: (оставьте это поле пустым).
-
Нажмите “Заменить все”.
-
Внимание: Этот метод может быть опасен, если у вас есть данные, которые выглядят как теги, но не являются ими (например,
<10в тексте). Также он не справится с некорректным HTML. Обязательно сделайте резервную копию файла перед этим! -
Использование командной строки (Linux/macOS -
sedилиawk): Это для более продвинутых пользователей.
С помощью sed:
sed 's/<[^>]*>//g' input.csv > output_cleaned.csv
Это применит замену ко всей строке. Если HTML только в определенных полях, и у вас сложная структура CSV (например, запятые внутри кавычек), sed может быть не лучшим выбором.
С помощью awk (более аккуратно для CSV, если указать разделитель):
awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++) gsub(/<[^>]+>/,"",$i)}1' input.csv > output_cleaned.csv
Замените , на ваш разделитель, если он другой.
Рекомендации:
-
Всегда делайте резервную копию вашего оригинального CSV файла перед любыми манипуляциями.
-
Для больших и сложных CSV файлов методы с Python или PHP являются наиболее надежными и гибкими, так как они корректно обрабатывают структуру CSV (разделители, кавычки) и позволяют более тонко настроить процесс очистки.
-
Регулярное выражение
<[^>]+>удалит большинство стандартных тегов. Оно означает “найти символ<, за которым следует один или более любых символов, кроме>, и затем символ>”.
для очистки текста от таких специфичных тегов и (и их закрывающих пар) можно использовать регулярные выражения. Главное — сохранить текст, который находится внутри этих тегов.
Вот несколько способов:
1. Python
Это хороший выбор, если у вас много текста или это часть большего скрипта.
python Скопировать
Закрыть блок
import re
def clean_font_span_tags(text):
"""
Удаляет теги ... и ..., сохраняя их содержимое.
Обрабатывает и варианты с двойными кавычками типа size=""2"".
"""
# Удаляем открывающие и закрывающие теги и
# [^>]* будет соответствовать любым атрибутам внутри тега
text = re.sub(r'</?font[^>]*>', '', text, flags=re.IGNORECASE)
# Удаляем открывающие и закрывающие теги и
text = re.sub(r'</?span[^>]*>', '', text, flags=re.IGNORECASE)
return text
# Ваш пример текста
html_text = 'Это текст с некоторыми тегами и другими тегами, который нужно очистить.'
html_text_variation1 = 'А это КРАСНЫЙ текст.'
html_text_variation2 = 'Просто текст со спаном.'
cleaned_text = clean_font_span_tags(html_text)
print(f"Оригинал: {html_text}")
print(f"Очищенный: {cleaned_text}")
cleaned_text_v1 = clean_font_span_tags(html_text_variation1)
print(f"Оригинал: {html_text_variation1}")
print(f"Очищенный: {cleaned_text_v1}")
cleaned_text_v2 = clean_font_span_tags(html_text_variation2)
print(f"Оригинал: {html_text_variation2}")
print(f"Очищенный: {cleaned_text_v2}")
# Более элегантный вариант с одним выражением
def clean_specific_tags_combined(text):
# </? означает необязательный / (для открывающего или закрывающего тега)
# (font|span) означает "font" ИЛИ "span"
# [^>]* соответствует любым атрибутам
# flags=re.IGNORECASE делает поиск нечувствительным к регистру (FONT, Font, font)
cleaned_text = re.sub(r'</?(font|span)[^>]*>', '', text, flags=re.IGNORECASE)
return cleaned_text
print("\n--- Комбинированный вариант ---")
cleaned_combined = clean_specific_tags_combined(html_text)
print(f"Оригинал: {html_text}")
print(f"Очищенный: {cleaned_combined}")
cleaned_combined_v1 = clean_specific_tags_combined(html_text_variation1)
print(f"Оригинал: {html_text_variation1}")
print(f"Очищенный: {cleaned_combined_v1}")
Пояснение регулярного выражения </?(font|span)[^>]>:*
-
</?: Соответствует<или</(открывающий или закрывающий тег). -
(font|span): Группа, которая соответствует либо слову “font”, либо слову “span”. -
[^>]*: Соответствует любым символам, кроме>, ноль или более раз. Это захватывает все атрибуты внутри тега (например,size=""2"" face=""Arial"илиstyle="..."). -
>: Соответствует закрывающей угловой скобке тега. -
re.IGNORECASE: Флаг, делающий поиск нечувствительным к регистру (т.е.,, “ будут найдены).
2. JavaScript (для браузера или Node.js)
javascript Скопировать
Закрыть блок
function cleanFontSpanTags(text) {
// g - глобальный поиск (все вхождения)
// i - нечувствительный к регистру
let cleanedText = text.replace(/<\/?font[^>]*>/gi, '');
cleanedText = cleanedText.replace(/<\/?span[^>]*>/gi, '');
return cleanedText;
}
// Комбинированный вариант
function cleanSpecificTagsCombined(text) {
const regex = /<\/?(font|span)[^>]*>/gi;
return text.replace(regex, '');
}
let htmlText = 'Это текст с некоторыми тегами и другими тегами, который нужно очистить.';
let htmlTextVariation1 = 'А это КРАСНЫЙ текст.';
console.log("Оригинал:", htmlText);
console.log("Очищенный (отдельно):", cleanFontSpanTags(htmlText));
console.log("Очищенный (комбинированно):", cleanSpecificTagsCombined(htmlText));
console.log("Оригинал:", htmlTextVariation1);
console.log("Очищенный (комбинированно):", cleanSpecificTagsCombined(htmlTextVariation1));
3. PHP
php Скопировать
Закрыть блок
<?php
function cleanFontSpanTags($text) {
// i в конце регулярного выражения для нечувствительности к регистру
$text = preg_replace('/<\/?font[^>]*>/i', '', $text);
$text = preg_replace('/<\/?span[^>]*>/i', '', $text);
return $text;
}
// Комбинированный вариант
function cleanSpecificTagsCombined($text) {
return preg_replace('/<\/?(font|span)[^>]*>/i', '', $text);
}
$htmlText = 'Это текст с некоторыми тегами и другими тегами, который нужно очистить.';
$htmlTextVariation1 = 'А это КРАСНЫЙ текст.';
echo "Оригинал: " . $htmlText . "\n";
echo "Очищенный (отдельно): " . cleanFontSpanTags($htmlText) . "\n";
echo "Очищенный (комбинированно): " . cleanSpecificTagsCombined($htmlText) . "\n\n";
echo "Оригинал: " . $htmlTextVariation1 . "\n";
echo "Очищенный (комбинированно): " . cleanSpecificTagsCombined($htmlTextVariation1) . "\n";
?>
4. В текстовом редакторе (например, VS Code, Sublime Text, Notepad++)
Большинство современных текстовых редакторов поддерживают поиск и замену с использованием регулярных выражений:
-
Откройте диалог “Найти и Заменить” (обычно
Ctrl+HилиCmd+H). -
Включите режим регулярных выражений (часто иконка
.*или флажок “Regex”). -
Найти:
</?(font|span)[^>]*> -
Заменить на: (оставьте это поле пустым)
-
Убедитесь, что включен режим нечувствительности к регистру (если есть такая опция, иначе используйте
</?(font|FONT|span|SPAN)[^>]*>или аналогичный вариант, если редактор не поддерживает флаги в выражении). -
Нажмите “Заменить все”.
Важно: Регулярные выражения мощны, но могут быть сложны для очень вложенного или невалидного HTML. Для простых случаев, как ваш, они подходят отлично. Если HTML очень сложный и нужно гарантировать 100% корректность разбора, лучше использовать полноценный HTML-парсер (например, BeautifulSoup в Python, DOMParser в JavaScript), а затем удалять нужные узлы. Но для вашей задачи это, скорее всего, избыточно.
Комбинированные варианты (</?(font|span)[^>]*>) более элегантны и эффективны, так как проходят по тексту один раз для обоих тегов.
Выберите способ, который вам наиболее удобен и соответствует вашим техническим возможностям. Если файл большой или требует аккуратной обработки, я бы рекомендовал Python.
- Форматирование отступов и выравнивание
Цель: Привести код к единому стилю отступов, чтобы он был читаемым и аккуратным.
-
Единообразие: Табы или Пробелы?
-
Определитесь со стилем: Решите, будете ли вы использовать табы или пробелы для отступов (и сколько пробелов, если выбрали их, обычно 2 или 4).
-
Настройка Notepad++:
-
Опции -> Настройки... -> Языки меню(илиОпции -> Настройки... -> Правка -> Табуляция). -
Здесь вы можете установить “Размер табуляции” и выбрать “Заменять пробелом” (если хотите использовать пробелы вместо табов). Убедитесь, что это настроено для типа файла, с которым вы работаете (например,
[По умолчанию]или конкретный язык). -
Преобразование существующих отступов:
-
Выделите весь код (
Ctrl+A). -
Правка -> Операции с пробелами -> Табуляция в пробелы(если вы решили использовать пробелы). -
Правка -> Операции с пробелами -> Пробелы в табуляцию (все)(если вы решили использовать табы). -
Правка -> Операции с пробелами -> Пробелы в табуляцию (ведущие)(преобразует только начальные пробелы в строки в табы). -
Автоматический отступ (частично):
-
Notepad++ предлагает базовый автоматический отступ при нажатии Enter после строки, заканчивающейся, например,
{в C-подобных языках. -
Для более сложного форматирования (например, HTML/XML):
-
Плагин XML Tools: Если еще не установлен, установите через
Плагины -> Plugins Admin..., найдитеXML Toolsи установите. -
После установки выделите ваш HTML/XML код и выберите
Плагины -> XML Tools -> Pretty print (libXML)илиPretty print (Indent text). Это отформатирует структуру документа. -
Ручное выравнивание:
-
Выделите строки, которые нужно сдвинуть.
-
Tab– сдвинуть вправо (увеличить отступ). -
Shift+Tab– сдвинуть влево (уменьшить отступ).
- Удаление лишних пробелов или пустых строк
Цель: Убрать визуальный мусор, который не несет смысловой нагрузки.
-
Удаление замыкающих пробелов (в конце строк):
-
Правка -> Операции с пробелами -> Убрать замыкающие пробелы. Очень полезная функция, так как эти пробелы часто невидимы, но могут мешать. -
Удаление начальных пробелов:
-
Правка -> Операции с пробелами -> Убрать начальные пробелы. Будьте осторожны, если отступы несут смысловую нагрузку (как в Python). -
Удаление начальных и замыкающих пробелов:
-
Правка -> Операции с пробелами -> Убрать начальные и замыкающие пробелы. -
Удаление пустых строк:
-
Правка -> Операции со строками -> Удалить пустые строки(удаляет строки, где нет вообще никаких символов). -
Правка -> Операции со строками -> Удалить пустые строки (содержащие пробельные символы)(удаляет и строки, где есть только пробелы или табы). -
Удаление множественных пробелов подряд, оставляя один:
-
Используйте Поиск и Замену (
Ctrl+H). -
Найти что:
\s{2,}(или просто “– два пробела, если речь только о пробелах, а не всех пробельных символах) -
Заменить на: “(один пробел)
-
Режим поиска: “Регулярные выражения” (если используете
\s{2,}) или “Обычный” (если два пробела). -
Нажмите “Заменить все”.
-
Замена нескольких пустых строк на одну:
-
Используйте Поиск и Замену (
Ctrl+H). -
Найти что:
(\r\n){2,}(для Windows-формата строк) или(\n){2,}(для Unix-формата).\R{2,}может сработать как универсальный вариант для любых переводов строк. -
Заменить на:
\r\n(или\nсоответственно, или\R) -
Режим поиска: “Регулярные выражения”.
-
Нажимайте “Заменить все” несколько раз, пока замены не прекратятся.
-
Или более сложный вариант за один проход:
-
Найти что:
^\s*\R(пустая строка или строка с пробелами) -
Заменить на: (оставить пустым)
-
Режим поиска: “Регулярные выражения”.
-
Это удалит все пустые строки. Если нужно оставить одну пустую строку между блоками, это потребует более сложного regex или ручной работы.
- Удаление специфических символов или замена текста
Цель: Избавиться от ненужных символов или провести глобальные замены.
-
Простой поиск и замена (
Ctrl+H): -
Найти что: Текст или символ, который нужно заменить/удалить.
-
Заменить на: Новый текст (или оставить пустым для удаления).
-
Режим поиска: “Обычный”.
-
Опции: “Учитывать регистр”, “Только слово целиком”.
-
Расширенный режим поиска и замены:
-
Режим поиска: “Расширенный (\n, \r, \t, \0, \x…)”.
-
Позволяет искать и заменять специальные символы:
-
\t– табуляция -
\n– перевод строки (LF) -
\r– возврат каретки (CR) -
\0– нулевой символ -
\xNN– символ с HEX-кодом NN. -
Пример: Заменить все символы табуляции на 4 пробела.
-
Найти что:
\t -
Заменить на: “(четыре пробела)
-
Режим поиска: “Расширенный”.
-
Регулярные выражения (самый мощный способ):
-
Режим поиска: “Регулярные выражения”.
-
Пример: Удалить все цифры из текста:
-
Найти что:
\d(или[0-9]) -
Заменить на: (оставить пустым)
-
Пример: Удалить определенные символы, например, только
!,?,.,,: -
Найти что:
[!?.,](символы внутри квадратных скобок) -
Заменить на: (оставить пустым)
-
Пример: Удалить все символы, не являющиеся буквами латинского алфавита, цифрами или пробелом:
-
Найти что:
[^a-zA-Z0-9 ](символ^в начале квадратных скобок означает “не”) -
Заменить на: (оставить пустым)
-
Пример: Заменить “старое_слово” на “новое_слово” только если это отдельное слово:
-
Найти что:
\bстарое_слово\b(\bозначает границу слова) -
Заменить на:
новое_слово
Общие советы при очистке:
-
ДЕЛАЙТЕ РЕЗЕРВНЫЕ КОПИИ! Перед тем как применять массовые изменения, особенно с регулярными выражениями, сохраните копию вашего файла.
-
Тестируйте: Сначала используйте кнопку “Найти” или “Считать”, чтобы убедиться, что ваше правило поиска выделяет именно то, что нужно, прежде чем нажимать “Заменить все”.
-
Пошагово: Не пытайтесь исправить все сразу одной командой. Лучше применять очистку поэтапно.
-
Контекст языка: Помните, что для некоторых языков (например, Python) отступы критически важны. Будьте осторожны с их автоматическим изменением.
Ищете надежного партнера по веб-разработке и автоматизации? Мы помогаем бизнесу расти с помощью современных технологий, автоматизации процессов и экспертного SEO. Свяжитесь с нами, чтобы обсудить вашу задачу.