Search code examples
pythonpython-3.xcsvdelete-row

Delete empty row in XML File


When creating an XML file, it always creates blank lines for me. This code looks like this:

for row in tbody.find_elements_by_xpath('./tr'):
    itemsEmployee = row.find_elements_by_xpath('./td')
    fileWriter.writerow([itemsEmployee[1].text, itemsEmployee[5].text, itemsEmployee[2].text, itemsEmployee[3].text,
                         itemsEmployee[4].text, itemsEmployee[6].text, itemsEmployee[7].text, itemsEmployee[8].text])

First of all, I don't know why I get blank lines. But anyway.

I now want to delete the empty lines and save the XML. (In a new file)

My attempt was as follows:

def deleteEmptyRowsInXML():
    input = open('../data/employees_csv.csv', 'rb')
    output = open('../data/employees.csv', 'wb')
    writer = csv.writer(output)
    for row in csv.reader(input):
        if row:
            writer.writerow(row)
    input.close()
    os.remove('../data/employees_csv.csv')
    output.close()

I would also like a solution in the same file.

Get the error:

_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

in this line:

for row in csv.reader(input):

Solution

  • A csv writer expects its underlying file to be opened with newline=''. The rationale is that RFC 4180 mandates that a csv file should have '\r\n' as end of line independently on which system it is generated. So the csv module explicitely adds the \r\n, but if you forgot newline='' you get an empty line for each row.

    So it should be: output = open('../data/employees.csv', 'w', newline='')