cómo omitir una línea en blanco al leer un archivo CSV usando Python

Este es mi código, puedo imprimir cada línea pero cuando aparece una línea en blanco se imprime; debido al formato de archivo CSV, así que quiero omitir cuando aparece una línea en blanco

import csv import time ifile = open ("C:\Users\BKA4ABT\Desktop\Test_Specification\RDBI.csv", "rb") for line in csv.reader(ifile): if not line: empty_lines += 1 continue print line 

Si desea omitir todas las líneas de espacio en blanco, debe utilizar esta prueba: ' '.isspace() .

Como es posible que desee hacer algo más complicado que simplemente imprimir las líneas que no están en blanco en la consola (no es necesario usar el módulo CSV para eso), aquí hay un ejemplo que involucra un DictReader:

 #!/usr/bin/env python # Tested with Python 2.7 # I prefer this style of importing - hides the csv module # in case you do from this_file.py import * inside of __init__.py import csv as _csv # Real comments are more complicated ... def is_comment(line): return line.startswith('#') # Kind of sily wrapper def is_whitespace(line): return line.isspace() def iter_filtered(in_file, *filters): for line in in_file: if not any(fltr(line) for fltr in filters): yield line # A dis-advantage of this approach is that it requires storing rows in RAM # However, the largest CSV files I worked with were all under 100 Mb def read_and_filter_csv(csv_path, *filters): with open(csv_path, 'rb') as fin: iter_clean_lines = iter_filtered(fin, *filters) reader = _csv.DictReader(iter_clean_lines, delimiter=';') return [row for row in reader] # Stores all processed lines in RAM def main_v1(csv_path): for row in read_and_filter_csv(csv_path, is_comment, is_whitespace): print(row) # Or do something else with it # Simpler, less refactored version, does not use with def main_v2(csv_path): try: fin = open(csv_path, 'rb') reader = _csv.DictReader((line for line in fin if not line.startswith('#') and not line.isspace()), delimiter=';') for row in reader: print(row) # Or do something else with it finally: fin.close() if __name__ == '__main__': csv_path = "C:\Users\BKA4ABT\Desktop\Test_Specification\RDBI.csv" main_v1(csv_path) print('\n'*3) main_v2(csv_path) 

En lugar de

 if not line: 

Esto debería funcionar:

 if not ''.join(line).strip(): 

Puede eliminar los espacios en blanco iniciales y finales, y si la longitud es cero, la línea estará vacía.

 import csv with open('userlist.csv') as f: reader = csv.reader(f) user_header = next(reader) # Add this line if there the header is user_list = [] # Create a new user list for input for row in reader: if any(row): # Pick up the non-blank row of list print (row) # Just for verification user_list.append(row) # Compose all the rest data into the list 
 import csv ifile=csv.reader(open('C:\Users\BKA4ABT\Desktop\Test_Specification\RDBI.csv', 'rb'),delimiter=';') for line in ifile: if set(line).pop()=='': pass else: for cell_value in line: print cell_value 

Mi sugerencia sería simplemente usar el lector csv que puede delimitar el archivo en filas. De esta forma, puede verificar si la fila está vacía y, si es así, continuar.

 import csv with open('some.csv', 'r') as csvfile: # the delimiter depends on how your CSV seperates values csvReader = csv.reader(csvfile, delimiter = '\t') for row in csvReader: # check if row is empty if not (row): continue 

Este ejemplo solo imprime los datos en forma de matriz al omitir las líneas vacías:

 import csv file = open("data.csv", "r") data = csv.reader(file) for line in data: if line: print line file.close() 

Lo encuentro mucho más claro que los otros ejemplos proporcionados.

Siempre se puede verificar el número de valores separados por comas. Parece ser mucho más productivo y eficiente.

Al leer las líneas de forma iterativa, ya que estos son una lista de valores separados por comas, usted obtendría un objeto de lista. Entonces, si no hay ningún elemento (enlace en blanco), podemos hacerlo saltar.

  with open(filename) as csv_file: csv_reader = csv.reader(csv_file, delimiter=",") for row in csv_reader: if len(row) == 0: continue