Удалить строки из csv файла python

Обновлено: 30.06.2024

CSV-файл в Python означает «значения, разделенные запятыми» и определяется как простой формат файла, использующий определенную структуру для упорядочивания табличных данных. Он хранит табличные данные, такие как электронная таблица или база данных, в виде обычного текста и имеет общий формат для обмена данными. Файл csv открывается на листе Excel, а данные строк и столбцов определяют стандартный формат.

Узнаем, как осуществляется чтение и запись CSV-файлов в Python.

Функции модуля Python CSV

Модуль CSV используется для обработки файлов CSV для чтения / записи и получения данных из указанных столбцов. Существуют следующие типы функций CSV:

Чтение файлов CSV

Python предоставляет различные функции для чтения файла CSV. Опишем несколько методов для чтения.

В Python модуль csv.reader() используется для чтения файла csv. Он берет каждую строку файла и составляет список всех столбцов.

Мы взяли текстовый файл с именем python.txt, в котором есть разделитель по умолчанию(,) со следующими данными:

В приведенном выше коде мы открыли python.csv с помощью функции open(). Мы использовали функцию csv.reader() для чтения файла, который возвращает итеративный объект чтения. Объект чтения состоял из данных, и мы повторили цикл, используя цикл for, чтобы распечатать содержимое каждой строки.

Чтение CSV в словаре

Мы также можем использовать функцию DictReader() для чтения файла CSV непосредственно в словаре, а не для работы со списком отдельных строковых элементов.

Чтение с помощью Pandas

Pandas определяется как библиотека с открытым исходным кодом, которая построена на основе библиотеки NumPy. Он обеспечивает быстрый анализ, очистку данных и подготовку данных для пользователя.

Чтение файла csv в pandas DataFrame выполняется быстро и просто. Нам не нужно писать достаточно строк кода, чтобы открывать, анализировать и читать файл csv в pandas, и он хранит данные в DataFrame.

Здесь мы берем для чтения немного более сложный файл под названием hrdata.csv, который содержит данные сотрудников компании.

В приведенном выше коде трех строк достаточно для чтения файла, и только одна из них выполняет фактическую работу, то есть pandas.read_csv()

Запись файлов CSV

Мы также можем не только читать, но и писать любые новые и существующие файлы CSV. Запись файлов на Python осуществляется с помощью модуля csv.writer(). Он похож на модуль csv.reader() и также имеет два метода, то есть функцию записи или класс Dict Writer.

Он представляет две функции: writerow() и writerows(). Функция writerow() записывает только одну строку, а функция writerows() записывает более одной строки.

Диалекты

Они определяются как конструкция, которая позволяет создавать, хранить и повторно использовать различные параметры форматирования. Диалект поддерживает несколько атрибутов; наиболее часто используются:

Запишем следующие данные в файл CSV.

Он возвращает файл с именем Python.csv, который содержит следующие данные:

Запись CSV в словарь

Мы также можем использовать класс DictWriter для записи файла CSV непосредственно в словарь.

Я пытаюсь удалить строки с определенным идентификатором в определенные даты из большого файла CSV.

CSV-файл содержит столбец [3] с датами, отформатированными как «1962-05-23», и столбец с идентификаторами [2]: «ddd: 011232700: mpeg21: a00191».

В следующем диапазоне дат:

  • С 01-01-1951 по 12-31-1951
  • С 07-01-1962 по 12-31-1962
  • С 01-01 по 09-30-1963
  • 7-01 до 07-31-1965
  • С 10-01 до 10-31-1965
  • С 04-01-1966 по 11-30-1966
  • С 01-01-1969 по 12-31-1969
  • 01-01-1970 до 12-31-1989

Я хочу удалить строки, содержащие идентификатор DDD: 11 *

Я думаю, что мне нужно создать переменную, которая содержит диапазон дат и идентификатор. И искать их в каждом ряду, но я очень плохо знаком с Python, поэтому я не уверен, что было бы красноречивым способом сделать это.

Это то, что у меня сейчас. - КОД ОБНОВЛЕН

4 ответа

Вот как я бы подошел к этому, но это может быть не самый лучший метод.

Я создал список кортежей ваших диапазонов дат (для краткости я поместил в него только 2 диапазона), а затем преобразовал их в объекты datetime.

Я использовал карты для этого в одной строке: первый цикл по всем кортежам в этом списке, применяя функцию, которая перебирает все записи в этом кортеже и конвертирует в дату, используя функции кортежа и списка, чтобы вернуться к оригиналу. структура. Делая это долгий путь будет выглядеть так:

Обратите внимание, что я просто конвертирую каждый элемент в кортеже в дату и добавляю кортежи в новый список, заменяя оригинальный (который мне больше не нужен).

Затем я создаю функцию datefilter, которая принимает строку даты, преобразует ее в дату и время, а затем перебирает все диапазоны, проверяя, находится ли значение в этом диапазоне. Если это так, мы возвращаем True (указывая, что этот элемент должен быть отфильтрован), в противном случае возвращаем False, если мы проверяем все диапазоны без совпадений (указывая, что мы не фильтруем этот элемент).

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


Удалить пустые строки по значение + удалить строки если определенные строки ниже содержат пустые ячейки
Добрый день, есть страница в excel (прикрепил файл с примером, в оригинале 520 строк) она.

Удалить пустые строки из файла
Надо именно удалить (а не пропустить или не перенести текст в новый файл без пустых строк) пустые.


Удалить из файла пустые строки
Подскажите пожалуйста как в файле пустые строки удалить: 00259C6D1176 Device name.

antoniogrid, так ты его почисти ДО того как засунешь в панду. А там много пустых то строк?

Я его открыть не могу, посмотрел LTFViewer5u - там все в порядке
Написал, что если строка равна нулю в исходном файле - то берем следующую строку, эту не пишем.
Все равно.

Так же эта функция делает то же самое, что за фигня.

Написал, что если строка равна нулю в исходном файле - то берем следующую строку, эту не пишем.
Все равно.
Так же эта функция делает то же самое, что за фигня. ничего не понял.
1) Если попытаться записывать только не пустые строки тоже падает ошибка?
2) если говоришь открывал файл -там реально есть пустые строки? или там строки вида ". "?

Нет ошибка не падает

Просто пишет в выходной файл типа:

1.Строка blalbalblabsghv
2.Строка
3.Строка blalbalblabrweqr
4.Строка
5.Строка blalbalblabrr
6.Строка
7.Строка blalbalblab34
8.Строка
9.Строка blalbalblab34

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

antoniogrid, стой, тогда откуда мысль что там реально есть пустые строки?
сколько у тебя оперативной памяти?

Добавлено через 2 минуты
Промежутки появляются, когда я запускаю

тогда откуда мысль что там реально есть пустые строки?

перефразирую -сколько оперативки есть при запуске твоей проги? может там реально всего полтора гига есть свободных?

50% памяти при запуске скрипта
Сейчас потестировал на меньших объемах - один хрен

файл из
файл в
Вот такая хрень от скрипта. Что я сделал не так. Понять не могу.
После того, как я получил файл в
Я хочу удалить пустые строки.

Но может, на старте их не нужно допускать?

Я не понял - проблема с памятью или пустыми строками?
ПО пустым строкам решается так:

По newline='' написано в документации.
Тоже самое и с записью.

If newline='' is not specified, newlines embedded inside quoted fields will not be interpreted correctly, and on platforms that use \r\n linendings on write an extra \r will be added. It should always be safe to specify newline='', since the csv module does its own (universal) newline handling. Ну, смотрите, если я сохранил большой файл - может ругаться на память. И ничего не сделать.
Если поменьше, строчек 1000 - 10000 - тогда скрипт проходит - но ничего не меняется.

Добавлено через 4 минуты
Для чтения большого файла есть специальные параметры в read_csv:

iterator bool, default False
Return TextFileReader object for iteration or getting chunks with get_chunk().

Changed in version 1.2: TextFileReader is a context manager.

chunksize int, optional
Return TextFileReader object for iteration. See the IO Tools docs for more information on iterator and chunksize.

Не знаю. та же тема

Ну читать же надо что люди пишут.

По newline='' написано в документации.
Тоже самое и с записью. Ты прочитал без лишних newlines, а при записи - добавил их. Молодца.
В твоем csv нет никаких пустых строк. Следовательно, какой смысл вообще переливать из пустого одного файла в другой файл порожнее.?

возьмет только первые 100 строк, например?

По остальным замечаниям разобрался. но, полез в документацию, там про newline как-то применительно к open ничего не нашел. А где ты смотришь?

Удалить пустые строки из файла
вот задача: Пусть дан текстовый файл f1. Перепишите его содержимое в файл f2, сохраняя строчную.

Удалить пустые строки из файла
Помогите убрать пустые строки на выходе ! Что-то не получается . using System; using.

Удалить все пустые строки из файла
Помогите пожалуйста написать функцию на Visual C++ : удалить все пропущенные (пустые) строки.

Удалить из файла все пустые строки
Компонентой типизированного файла является строка с объявленной длиной 80 символов. В частном.


Удалить из файла все пустые строки
Дан текстовый файл. Удалить из него все пустые строки. Вот мой вариант решения: program Project2;.

Удалить из файла все пустые строки
Из текстового файла удалить все пустые строки. Пустой считать строку, не содержащую символов или.

CSV (comma-separated value) - это формат представления табличных данных (например, это могут быть данные из таблицы или данные из БД).

В этом формате каждая строка файла - это строка таблицы. Несмотря на название формата, разделителем может быть не только запятая.

И хотя у форматов с другим разделителем может быть и собственное название, например, TSV (tab separated values), тем не менее, под форматом CSV понимают, как правило, любые разделители.

Пример файла в формате CSV (sw_data.csv):

В стандартной библиотеке Python есть модуль csv, который позволяет работать с файлами в CSV формате.

Чтение¶

Пример чтения файла в формате CSV (файл csv_read.py):

Вывод будет таким:

В первом списке находятся названия столбцов, а в остальных соответствующие значения.

Обратите внимание, что сам csv.reader возвращает итератор:

При необходимости его можно превратить в список таким образом:

Чаще всего заголовки столбцов удобней получить отдельным объектом. Это можно сделать таким образом (файл csv_read_headers.py):

Иногда в результате обработки гораздо удобней получить словари, в которых ключи - это названия столбцов, а значения - значения столбцов.

Для этого в модуле есть DictReader (файл csv_read_dict.py):

Вывод будет таким:

До Python 3.8 возвращался отдельный тип упорядоченные словари (OrderedDict).

Запись¶

Аналогичным образом с помощью модуля csv можно и записать файл в формате CSV (файл csv_write.py):

В примере выше строки из списка сначала записываются в файл, а затем содержимое файла выводится на стандартный поток вывода.

Вывод будет таким:

Обратите внимание на интересную особенность: строки в последнем столбце взяты в кавычки, а остальные значения - нет.

Так получилось из-за того, что во всех строках последнего столбца есть запятая. И кавычки указывают на то, что именно является целой строкой. Когда запятая находится в кавычках, модуль csv не воспринимает её как разделитель.

Иногда лучше, чтобы все строки были в кавычках. Конечно, в данном случае достаточно простой пример, но когда в строках больше значений, то кавычки позволяют указать, где начинается и заканчивается значение.

Модуль csv позволяет управлять этим. Для того, чтобы все строки записывались в CSV-файл с кавычками, надо изменить скрипт таким образом (файл csv_write_quoting.py):

Теперь вывод будет таким:

Теперь все значения с кавычками. И поскольку номер модели задан как строка в изначальном списке, тут он тоже в кавычках.

Кроме метода writerow, поддерживается метод writerows. Ему можно передать любой итерируемый объект.

Например, предыдущий пример можно записать таким образом (файл csv_writerows.py):

DictWriter¶

С помощью DictWriter можно записать словари в формат CSV.

В целом DictWriter работает так же, как writer, но так как словари не упорядочены, надо указывать явно в каком порядке будут идти столбцы в файле. Для этого используется параметр fieldnames (файл csv_write_dict.py):

Указание разделителя¶

Иногда в качестве разделителя используются другие значения. В таком случае должна быть возможность подсказать модулю, какой именно разделитель использовать.

Читайте также: