Как с помощью Python получить строку из CSV-файла без нежелательных символов?

  • 8 августа 2023 г. 11:12
Ответы на вопрос 4
Чтобы получить строку из CSV-файла без нежелательных символов, можно использовать модуль `pandas` для чтения CSV-файла и модуль `re` (регулярные выражения) для очистки строк.

Вот пример, где мы считываем CSV-файл и удаляем все символы, которые не являются буквами или цифрами:

```python
import pandas as pd
import re

# Открываем CSV-файл.
df = pd.read_csv('file.csv')

# Применяем регулярное выражение ко всем строкам в столбце с названием 'column_name'.
# Заменим все не буквы и цифры на пустую строку.
# Обратите внимание, что 'column_name' - это имя вашего столбца, замените его на ваше.
df['column_name'] = df['column_name'].apply(lambda x: re.sub('[^a-zA-Z0-9 \n\.]', '', x))

# Сохраняем изменения назад в CSV-файл.
df.to_csv('file.csv', index=False)
```

В этом коде `[^a-zA-Z0-9 \n\.]` - это регулярное выражение, которое соответствует всем символам, которые не являются буквами (заглавными или строчными), цифрами, пробелом, переводами строк `\n`, либо точкой `\.`. `re.sub` заменяет все найденные пары на пустую строку `''`.

Учтите, что это удаляет все символы, не специфицированные в регулярном выражении. Если вам нужно сохранить определенные символы или наборы символов, добавьте их в регулярное выражение.

Также не забывайте делать бэкап данных перед подобными операциями, так как они могут привести к потере данных.
978196782; Віталій; Даниленко; Андрійович
Если хочешь использовать эту логику, можно просто удалить пустые строки из найденных результатов.matching_rows.append([x for x in row if x])
import csv

def get_search_terms():
    return input("Введите данные через ';': ").split(';')

def find_matches_in_csv(file_name, search_terms):
    found_entries = []

    with open(file_name, 'r', encoding='utf-8') as csv_file:
        reader = csv.reader(csv_file, delimiter=';')
        
        next(reader)
        
        for row in reader:
            if any(term.lower() in entry.lower() for entry in row for term in search_terms):
                formatted_row = '; '.join([x for x in row if x])
                found_entries.append(formatted_row)
    
    return found_entries

if __name__ == "__main__":
    FILE_PATH = 'krasna.csv'
    terms_to_search = get_search_terms()
    
    matching_entries = find_matches_in_csv(FILE_PATH, terms_to_search)
    
    if matching_entries:
        for entry in matching_entries:
            print(entry)
    else:
        print("Не найдено")
Похожие вопросы