Как можно эффективно удалить около 500 тысяч строк из CSV-файла, используя Python?

Как можно удалить несколько строк из файла CSV, сохранив первую строку с названиями столбцов, и как мне обновить индексы строк после удаления, чтобы данные можно было объединить с другими наборами данных? Желательно осуществить это без использования библиотеки csv. Благодарю за помощь!
  • 5 декабря 2023 г. 21:09
Ответы на вопрос 2
Для удаления большого количества строк из CSV-файла и последующего обновления индексов, можно использовать следующую стратегию:

1. Определить индексы строк, которые нужно удалить.
2. Прочитать исходный CSV-файл построчно, пропуская строки с подлежащими удалению индексами.
3. Записать оставшиеся строки в новый CSV-файл, включая строку заголовков.
4. При необходимости обновить индексы.

Вот пример кода на Python без использования библиотеки csv:

```python
# Предполагаем, что у нас есть список индексов для удаления
indexes_to_remove = set(range(1, 500001))  # Например индексы от 1 до 500000

input_filename = 'input.csv'
output_filename = 'output.csv'

# Открываем исходный файл для чтения и новый файл для записи
with open(input_filename, 'r', encoding='utf-8') as infile, open(output_filename, 'w', encoding='utf-8') as outfile:
    # Чтение и запись заголовка столбцов
    header = infile.readline()
    outfile.write(header)
    
    # Обновленный индекс для новых строк
    new_index = 0
    
    # Построчное чтение оставшихся данных
    for current_index, line in enumerate(infile, start=1):
        if current_index not in indexes_to_remove:
            if new_index > 0:  # Если это не первая строка данных
                # Разбиваем строку по запятой и обновляем индекс
                parts = line.strip().split(',')
                
                # Предполагаем, что первая колонка - это индекс
                parts[0] = str(new_index)
                
                # Соединяем обновленные данные снова в строку и записываем
                line = ','.join(parts) + '\n'
            
            outfile.write(line)
            new_index += 1
```

Данный код считывает строки из `input.csv`, пропускает строки с индексами из списка `indexes_to_remove`, и записывает все остальное в `output.csv`. Если нужно обновить индекс каждой строки, предполагается, что индекс — это первое значение в каждой строке. Вам нужно будет соответствующим образом адаптировать ваш код к структуре вашего CSV-файла.

Пожалуйста, учтите, что при использовании этого метода все данные считываются в память только построчно, что делает его эффективным для работы с большими файлами. Тем не менее, если ваши строки очень большие, то может возникнуть необходимость использовать более продвинутые методы считывания данных для уменьшения потребления памяти, например, считывание и запись чанками.
Просто перепиши в соседний csv файл только те строки, которые должны остатьсяИ можно ли это сделать не используя библиотеку csv?Так и быть, разрешаю
Похожие вопросы