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

Если вы хотите изменить все строки в сюжете, может быть полезно определить свой собственный обработчик легенды:

import matplotlib.pyplot as plt
from matplotlib import legend_handler
from matplotlib.lines import Line2D
import numpy as np

class MyHandlerLine2D(legend_handler.HandlerLine2D):
    def create_artists(self, legend, orig_handle,
                       xdescent, ydescent, width, height, fontsize,
                       trans):

        xdata, xdata_marker = self.get_xdata(legend, xdescent, ydescent,
                                             width, height, fontsize)

        ydata = ((height-ydescent)/2.)*np.ones(xdata.shape, float)
        legline = Line2D(xdata, ydata)

        self.update_prop(legline, orig_handle, legend)
        #legline.update_from(orig_handle)
        #legend._set_artist_props(legline) # after update
        #legline.set_clip_box(None)
        #legline.set_clip_path(None)
        legline.set_drawstyle('default')
        legline.set_marker("")
        legline.set_linewidth(10)


        legline_marker = Line2D(xdata_marker, ydata[:len(xdata_marker)])
        self.update_prop(legline_marker, orig_handle, legend)
        #legline_marker.update_from(orig_handle)
        #legend._set_artist_props(legline_marker)
        #legline_marker.set_clip_box(None)
        #legline_marker.set_clip_path(None)
        legline_marker.set_linestyle('None')
        if legend.markerscale != 1:
            newsz = legline_marker.get_markersize()*legend.markerscale
            legline_marker.set_markersize(newsz)
        # we don't want to add this to the return list because
        # the texts and handles are assumed to be in one-to-one
        # correpondence.
        legline._legmarker = legline_marker

        return [legline, legline_marker]


plt.plot( [0, 1], [0, 1], '-r', lw=1, label='Line' )
plt.legend(handler_map={Line2D:MyHandlerLine2D()})

plt.show()
16
задан Unihedron 25 October 2014 в 06:06
поделиться

3 ответа

Используйте модуль csv:

import csv
...

with open(in_fnam) as in_file:
    with open(out_fnam, 'w') as out_file:
        writer = csv.writer(out_file)
        for row in csv.reader(in_file):
            if row:
                writer.writerow(row)

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

if any(row):

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

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

Обратите внимание, что в Python 2.x и более ранних версиях csv ожидаемые двоичные файлы, поэтому вам необходимо открыть файлы с флагом e 'b'. В 3.x это приведет к ошибке.

22
ответ дан Laurence Gonsalves 25 October 2014 в 06:06
поделиться

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
2
ответ дан vaibhav 25 October 2014 в 06:06
поделиться

Делать это с пандами очень просто. Откройте ваш 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)
0
ответ дан ayaio 25 October 2014 в 06:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: