how to skip blank line while reading CSV file using python

后端 未结 8 602
终归单人心
终归单人心 2020-12-03 20:55

This is my code i am able to print each line but when blank line appears it prints ; because of CSV file format, so i want to skip when blank line appears

im         


        
相关标签:
8条回答
  • 2020-12-03 21:45

    This example just prints the data in array form while skipping the empty lines:

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

    I find it much clearer than the other provided examples.

    0 讨论(0)
  • 2020-12-03 21:53

    If you want to skip all whitespace lines, you should use this test: ' '.isspace().

    Since you may want to do something more complicated than just printing the non-blank lines to the console(no need to use CSV module for that), here is an example that involves a 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)
    
    0 讨论(0)
提交回复
热议问题