如何在使用python读取CSV文件时跳过空白行

发布于 2021-01-29 18:19:52

这是我的代码,我能够打印每行,但是当出现空白行时,它会打印;由于CSV文件格式,因此当空白行出现时我想跳过

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
关注者
0
被浏览
149
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果要跳过所有空格行,则应使用以下测试:' '.isspace()

    由于您可能需要做的事情不只是将非空白行打印到控制台上(不需要使用CSV模块),因此这里是一个涉及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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看