如果Python中的任何元素为空,如何连接列表并删除整行

时间:2017-05-17 13:10:20

标签: python python-3.x csv

我有以下CSV文件:我读取csv并将每列存储到不同的变量(Name,Sub,Idx,Isd):

Name Sub  Idx Isd
AAB  YAH  2   7
AB   VF   5
     YHJ  3   4

YAH  HJY  25  23

现在我想将它们存储为表格形式(作为csv中的原始数据)。现在,我只想在所有单元格都有数据(没有空单元格)的情况下存储数据。

我的最终结果:

Name Sub Idx Isd
AAB  YAH 2   7
YAH  HJY 25  23

我使用以下代码:

import csv
from collections import defaultdict
columns=defaultdict(list)
with open('inputCSV.csv','r',) as f:
    reader=csv.DictReader(f)
    for row in reader:
        for(k,v) in row.items():
            columns[k].append(v)
name=columns['Name']
Sub=columns['Sub']
Idx=columns['Idx']
Isd=columns['Isd']

1 个答案:

答案 0 :(得分:0)

使用标准csv.reader()而不是字典阅读器可能更容易:

import csv

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)
    header = next(csv_input)
    csv_output.writerow(header)    # copy the header to the output

    for row in csv_input:
        if len(row) and '' not in row:
            csv_output.writerow(row)

首先将标题从输入CSV复制到输出CSV。然后对于每一行,它首先检查以确保它不是空行。然后它测试整行以查看是否有空值。如果没有,则将整行写入输出CSV文件。

给你一个output.csv包含:

Name,Sub,Idx,Isd
AAB,YAH,2,7
YAH,HJY,25,23

注意,这假设您使用的是Python 2.x.如果正在使用Python 3.x,请替换此行:

with open('input.csv', newline='') as f_input, open('output.csv', 'w', newline='') as f_output: