Skip to content
Advertisement

Remove empty lists in csv file in python

So I have a csv file called result and I’m getting this:

ID,age,sex,city,province,country  
[]   
11816.0,44,female,NaN,Aichi    
[]   
11814.0,64,male,Nagoya City,Aichi    
[]   
11813.0,64,male,Nagoya City,Aichi 

when I just want this:

11816.0,44,female,NaN,Aichi   # each line is a list        
11814.0,64,male,Nagoya City,Aichi  
11813.0,64,male,Nagoya City,Aichi 

as in without the empty lists.

How would I go about doing this? I tried to do

with open('result.csv', 'wt', newline='') as fout:
    csvout = csv.writer(fout)
    csvout.writerows('result.csv')

and I tried this:

with open("filename.csv", "r") as f:
    for line in f:
        print(line, end="")

and I tried this:

with open('result.csv') as csv_file:
    reader = csv.reader(csv_file)
    solution = [i] for row in reader]
    result = [[items for items in row if items != ''] for row in reader]

but none of them worked.

Advertisement

Answer

EDITED (after collecting more information):

I do think that attempting to work around bad data is not worth the trouble, but to answer the question literally would require comething like this:

with open('result.csv') as f:
    lines = f.readlines()

for l in filter(lambda x: x.strip() != '[]', lines):
    print(l.strip())

this will print the filtered list to stdout; you can then capture that output and save is as a new csv file. In any Unix-based OS you can just redirect the stdout to a file, properly named.

==== ORIGINAL =====

It’s difficult to understand what exactly you are trying to do in your code samples. For example, this line:

csvout.writerows('result.csv')

will write every character in the string (which looks like a file name, but who cares) into a file – whatever is attached to the writer object (results.csv in your sample #1 above).

Are you trying to write a collection of objects to a csv file?

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement