Remove blank lines in a csv

Asked

Viewed 1,413 times

2

I am trying to remove empty lines from a csv document:

Document:

phrase,

.,pt

.,en

.,en

.,it

.,es

.,pt

.,pt

.,es

.,pt

.,pt

"it’s not Expensive",en

"casi 50 euros la alfombra es cara",

" the price should go down!! " ,en

" new prices please ! ?? " ,en

My script:

import csv
import string

with open ("test.csv", "r") as f:
    csvfile = csv.reader(f, delimiter = ',')

    for line in csvfile:
        if line[1] == 'pt':
            frases = " ".join(line[0].lower().split()) 
            removePunct = "".join(word for word in mails if word not in string.punctuation)
            noEmptyLines = " ".join(lines for lines in removePunct if len(lines) != 0)

    print (noEmptyLines)

The expected result:

the price should go down

new prices please

My result:

n o v o s p r e ç o s p o r f a v o r

  • 1

    Have you tried . strip() ?

2 answers

2


for line in csvfile:
    if line[1] == 'pt':
        # Nesta linha, tomo a primeira coluna da linha do ficheiro CSV
        # troco a caixa das letras para minúscula e parto cada palavra
        # (atenção ao ' ', que é o caracter de partição), formando uma 
        # nova lista
        frase = line[0].lower().split(' ')

        novaspalavras = []
        for word in frase:

            # Nesta linha, tomo cada caracter da (palavra) variável 'word', 
            # contida em 'frase', comparo se é caracter de pontuação e, caso
            # não o seja, o caracter em questão é 'yieldado' para dentro
            # de uma lista de caracteres que, por sua vez, é tomada
            # pela função join de uma string vazia, ou seja,
            # a palavra será recomposta com "caracteres" de separação
            # vazios, tal como descrito na string que invoca join.
            novapalavra = "".join(char for char in word 
                        if char not in set(string.punctuation))

            if len(novapalavra) > 0:
                novaspalavras.append(novapalavra)

        # Nesta linha, recomponho a frase, emendando cada palavra com
        # strings " ", ou seja, espaços, intercalantes entre palavras
        # da lista.
        novafrase = " ".join(novaspalavras)

        # Nesta linha, caso a novafrase não seja vazia, ela é imprimida.
        if len(novafrase) > 0:
            print (novafrase)

0

Good morning,

Given the "document" and the example code, in this excerpt:

if line[1] == 'pt':
    ...

An Exception of the type IndexErrorwould be raised to the blank lines contained in the document.

The other point that interferes with your expected result, is that at the end of the loop for you make another join and how python strings are iterable Join traverses each string’s frame and unites them with a space.

The code below covers these two points of failure that I have detailed, and I believe it should work as desired.

with open("example.csv", "r") as f:
csvfile = csv.reader(f, delimiter=",")
for l in csvfile:
    if len(l) and l[-1] == "pt":
        if len(l[0]) > 1:
            removePunct = "".join(char for char in l[0] if char not in string.punctuation)
            print(removePunct)

I hope I’ve helped, and any doubts as to the solution I’m available!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.