首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用python读取CSV文件时跳过空行

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

Stack Overflow用户
提问于 2013-09-19 09:15:57
回答 8查看 60.6K关注 0票数 19

这是我的代码,我可以打印每一行,但当空行出现时,它会打印;因为CSV文件格式,所以我想跳过空行出现时。

代码语言:javascript
运行
复制
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
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-06-02 03:46:20

如果您想跳过所有空白行,应该使用以下测试:' '.isspace()

由于您可能想做一些比将非空行打印到控制台更复杂的事情(不需要为此使用CSV模块),下面是一个涉及DictReader的示例:

代码语言:javascript
运行
复制
#!/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)
票数 15
EN

Stack Overflow用户

发布于 2014-12-10 15:52:57

而不是

代码语言:javascript
运行
复制
if not line:

这应该是可行的:

代码语言:javascript
运行
复制
if not ''.join(line).strip():
票数 11
EN

Stack Overflow用户

发布于 2017-01-25 16:34:17

我的建议是只使用csv读取器,它可以将文件分隔成行。像这样,您只需检查行是否为空,如果为空,只需继续。

代码语言:javascript
运行
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18890688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档