Python убрать пустые строки csv

Удалить последнюю пустую строку в файле CSV

Я пытаюсь читать Input file который находится в формате таблицы и запишите его в файл CSV, но мой вывод также содержит одну последнюю пустую строку. Как я могу удалить последнюю пустую строку в CSV?

2 ответа

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

#UNTESTED nf=open(Output_File,'w+') with open(Input_File,'read') as f: for row in f: Current_line = str(row) Reformated_line=str(','.join(Current_line.split('|')[1:-1])) if Reformatted_line: nf.write(Reformated_line+ "\n") 
  • Вы должны использовать with последовательно. Откройте оба файла одинаково.
  • str(row) это неоперация. row это уже ул.
  • str(‘,’.join(. )) аналогично избыточно.
  • open(. ‘read’) недопустимо использование параметра mode для open() , Вы должны использовать r или вообще пропустить параметр.
  • Я предпочитаю не вводить новые имена при изменении формата существующих данных. То есть я предпочитаю row = row.split() над Reformatted_line = row.split() ,

Вот версия, которая включает эти и другие предложения:

with open(Input_File) as inf, open(Output_File, 'w+') as outf: for row in inf: row = ','.join(row.split('|')[1:-1]) if row: outf.write(row + "\n") 

Источник

Удалить пустые строки из CSV?

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

Использование модуля csv имеет одно важное преимущество, обрисованное в общих чертах Лоуренсом Гонсалвесом: это когда во входном файле есть пустые строки, встроенные в поля csv в кавычках.

Вы имеете в виду как », », », »? Как мне это проверить? Также как мне удалить конкретную строку. Скажите первый ряд или пятый ряд в файле.

@debugged: Существует один серьезный недостаток принятого ответа: файлы должны быть открыты в двоичном режиме (Python 2.X), иначе в Windows обработка CR LF испортит результаты.

7 ответов

import csv . input = open(in_fnam, 'rb') output = open(out_fnam, 'wb') writer = csv.writer(output) for row in csv.reader(input): if row: writer.writerow(row) input.close() output.close() 

Если вам также нужно удалить строки, где все поля пустые, измените строку if row: на:

И если вы также хотите обрабатывать поля, которые состоят только из пробелов как пустые, вы можете заменить его:

if any(field.strip() for field in row): 

Спасибо LG, что сработало для меня. Хотя у меня также есть несколько строк с пустыми полями. Пример: ‘. \ n’. Как проверить наличие пустых строк и строк с пустыми полями с помощью модуля CSV.

@noskio @Paulo: возможно иметь пустые строки, которые являются частью непустой строки в CSV-файле. Например: ‘foo, «bar\n\nbaz», quux’ содержит пустую строку, но представляет собой одну строку CSV.

@Laurence Gonsalves: у этого ответа есть одна серьезная проблема: файлы должны быть открыты в BINARY MODE (Python 2.X), иначе в Windows обработка CR LF портит результаты

Читайте также:  Java android onclicklistener example

@John: Джон: Спасибо. Я этого не знал. Я работаю в основном на Linux, где «b» не работает. Я вижу, что во всех примерах документа в модуле csv используется двоичный флаг (хотя я бы хотел, чтобы об этом явно сказано), поэтому я обновил ответ. Кстати: делать ваши комментарии смелыми не было действительно необходимо.

@Laurence Gonsalves: Python 2.7.1 docs «Если csvfile является файловым объектом, его нужно открывать с флагом« b »на платформах, где это имеет значение», — достаточно ясно в моей книге. Следует также сказать, что настоятельно рекомендуется использовать мобильность на платформах, где это не имеет значения, а также на форумах с мультикультурной аудиторией.

@John: я искал слово «двоичный», поэтому я пропустил эту заметку. Я согласен, что это достаточно явно.

Я использовал карту, чтобы справиться с этим, нет способа сделать это, если вы используете res = map (process_row, reader)? Я изменил это для цикла.

map @radtek не может добавлять или удалять элементы, только изменять элементы. Если вам нужен более функциональный подход, чем использование цикла for вы можете использовать filter или понимание. Например: res = [process_row(row) for row in reader if row] удалит пустые строки и обработает остальное с помощью process_row .

просто не используйте input и output если вы пытались скопировать и вставить это решение. Плохая практика использовать системные слова

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

EDIT: реальная пустая строка будет выглядеть как «\n»:

for line in f1.readlines(): if line.strip() == '': continue f2.write(line) 

строка со всеми пустыми полями будет выглядеть как «. \n». Если вы считаете это пустой строкой:

for line in f1.readlines(): if ''.join(line.split(',')).strip() == '': continue f2.write(line) 

открытие, закрытие, удаление и переименование файлов остается для вас упражнением. (подсказка: import os, help (open), help (os.rename), help (os.unlink))

EDIT2: Лоуренс Гонсалвис обратил мое внимание на то, что действительный файл csv может содержать пустые строки, встроенные в кавычки csv, например 1, ‘this\n\nis tricky’,123.45 . В этом случае модуль csv позаботится об этом для вас. Простите, Лоуренс, ваш ответ заслуживает того, чтобы его приняли. Модуль csv также рассмотрит проблемы, связанные с строкой типа «»,»»,»»\n .

Спасибо, Пауло. У меня обе ситуации происходят в моем CSV. Пустые строки и все пустые поля в строке, как вы упоминали выше. Теперь, что является преимуществом / недостатком использования вашего метода перед модулем CSV?

@debugged: метод csv, описанный в ответе с голосованием, не удалит строку со всеми пустыми полями. Если вы только фильтруете пустые места, модуль csv кажется излишним. Если вы сделаете дальнейшие манипуляции, то используйте модуль csv, так как он разделит каждую строку csv на удобный список python.

Читайте также:  Ссылки

Этот ответ меняет правильность на простоту. Да, использовать модуль csv немного сложнее, но на самом деле он работает правильно для случаев, таких как переводы строк, встроенные в кавычки.

@debugged: см. комментарий Лоуренса Гонсалвеса, где он описывает ситуацию, когда модуль cvs оправдан.

-1 Использование readlines — это оспа. Таким образом, полностью игнорируется тот факт, что файл является файлом CSV. Этот ответ не должен быть принят .

@John Джон Мачин: ответ был отредактирован, чтобы отразить правильное решение. Тем не менее, оригинал действителен, если вы знаете, что у cvs не будет строковых полей, нет нужды иметь в виду.

@Paulo Scardine: Совершенно независимо от того, что нужно использовать модуль csv для обработки файлов CSV независимо от того, что он думает, что он знает, и что ОП не сказал, что у него нет строк в его файле CSV, выкладывая дерьмо кода вроде readlines было достаточно, чтобы претендовать на -1.

код python для удаления пустой строки из файла csv без создания другого файла.

def ReadWriteconfig_file (файл):

try: file_object = open(file, 'r') lines = csv.reader(file_object, delimiter=',', quotechar='"') flag = 0 data=[] for line in lines: if line == []: flag =1 continue else: data.append(line) file_object.close() if flag ==1: #if blank line is present in file file_object = open(file, 'w') for line in data: str1 = ','.join(line) file_object.write(str1+"\n") file_object.close() except Exception,e: print e 

Удивило, что никто здесь не упомянул pandas . Вот возможное решение.

import pandas as pd df = pd.read_csv('input.csv') df.to_csv('output.csv', index=False) 

Делать это с пандами очень просто. Откройте ваш CSV файл с пандами:

import pandas as pd df = pd.read_csv("example.csv") #checking the number of empty rows in th csv file print (df.isnull().sum()) #Droping the empty rows modifiedDF = df.dropna() #Saving it to the csv file modifiedDF.to_csv('modifiedExample.csv',index=False) 

Мне нужно сделать это, но у меня нет пустой строки, написанной в конце файла CSV, как, к сожалению, делает этот код (что также делает Excel, если вы Save->.csv). Мой (даже более простой) код, использующий модуль CSV, тоже делает это:

import csv input = open("M51_csv_proc.csv", 'rb') output = open("dumpFile.csv", 'wb') writer = csv.writer(output) for row in csv.reader(input): writer.writerow(row) input.close() output.close() 

M51_csv_proc.csv имеет ровно 125 строк; программа всегда выводит 126 строк, последняя из которых пустая.

Я прошел через все эти темы, кажется, ничто не изменит этого поведения.

В этом script все CR/CRLF удаляются из файла CSV, а затем имеют такие строки:

Результат (в формате Excel CSV):

Ещё вопросы

  • 0 Как использовать регулярные выражения в MySQL запрос, чтобы удалить определенные символы?
  • 0 Триггер базы данных MySQL не работает должным образом
  • 0 Как я могу добавить значок на заголовке с выравниванием по центру в ионном?
  • 0 Поделитесь данными в контроллере в angularjs
  • -1 показ jQuery не определен, даже если загружен файл jQuery
  • 0 Как убрать белую рамку
  • 1 Подсчет количества вызовов функций для различных значений входных аргументов
  • 1 Векторизация панд с функцией на частях колонны
  • 1 Больше информации об ошибке + более длинная программа или меньше информации об ошибке + более короткая программа?
  • 0 выберите строки, которые удовлетворяют где пункт И строки, которые имеют общий ключ
  • 0 Возврат и передача массива для работы в C ++
  • 0 Может ли установка boost испортить мои программы?
  • 0 Проверка формы и отслеживание событий Analytics
  • 1 Identity Toolkit API ранее не использовался в проекте или он отключен
  • 0 Получение значения из http-ответа angularjs в случае веб-API ASP.Net
  • 1 Передать целое число для запуска потока в Java
  • 1 Базовая марионетка — как визуализировать CompositeView-> CollectionView-> ItemView
  • 0 Как отобразить результаты RSS ленты в списке JQuery
  • 0 показ дополнительной строки при чтении файла в c ++ с использованием fstream
  • 1 Android Drawable Shape с трехслойной рамкой
  • 1 Получение значения на основе идентификатора из Enums в Javascript
  • 0 FIND_IN_SET автоматически добавляет IS NULL в запросе в codeigniter, а также необходимо добавить скобку в моем запросе для создания группы
  • 0 изменение цвета шрифта с несколькими функциями .animate на нескольких div
  • 0 Слишком много символов в символьном литерале при преобразовании тега HTML в ссылку на сущность
  • 1 Вывод значений из списка ключей с помощью SQLAlchemy, Jinja2 и Flask
  • 0 Как использовать QToolButton
  • 0 Как настроить вывод с помощью регулярного выражения в текстовой области
  • 0 Проблема отправки писем в php [дубликаты]
  • 1 десериализовать сообщение, полученное из очереди сообщений
  • 1 Удалить строку заголовка по умолчанию JInternalFrame
  • 0 выпадающий список, который обновляет содержимое div при выборе
  • 1 Отрегулируйте элемент в панели навигации слева, если нет значка
  • 1 Невозможно отправить HTTP-запросы по износу Bluetooth
  • 0 Вызов C ++ (член) функционирует динамически
  • 0 Как сохранить выбор флажка с тем же именем и идентификатором
  • 1 Как поставить задержку для функции в JavaScript? [Дубликат]
  • 1 WPF Multi Select Combobox найти то, что выбрано
  • 1 Firebase Username / Password Authentication — разрешить вход только одному устройству одновременно
  • 0 PHP Невозможно просмотреть изображение при загрузке с клиента на сервер
  • 1 Как машинописный текст разрешает импорт @ angular / core / testing и как упаковывается угловое ядро?
  • 0 HTML читается как недопустимый, перемещая содержимое HTML в
  • 1 Система маршрутизации MVC
  • 1 отображать необъектные значения во вложенных массивах в javascript
  • 1 получить общее количество по группам для всех строк, выбранных строк и процентов от общего числа панд
  • 0 Наименование векселей с использованием оператора модуля С ++
  • 0 Дерево с 3 детьми
  • 0 ajaForm возвращает неверный XML в responseXML
  • 1 В чем разница между консолью разработчиков и отчетами о сбоях на пожарной базе?
  • 0 координаты мыши только с круглыми числами — функция jquery
  • 1 Модель не доступна вне пространства имен
Читайте также:  Sorted python key int

Источник

Оцените статью