在Python 3中从csv文件中删除空列表

时间:2017-03-30 12:10:33

标签: python-3.x

我一直致力于从 csv 文件中获取行的代码,并将它们传输到整数列表中以进行进一步的数学运算。但是,如果一行变为空,则会导致问题。此外,用户将不知道哪一行是空的,因此解决方案应该是通用的,而不是指向一行并将其删除。这是代码:

import csv
import statistics as st


def RepresentsInt(i):
    try:
       int(i)
       return True
    except ValueError:
       return False
l = []

with open('Test.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')

    for row in reader:
        l.append([int(r) if RepresentsInt(r) else 0 for r in row])



    for row in l:

        row=[x for x in row if x!=0]
        row.sort()
        print(row)

我已经尝试了l=[row for row in l if row!=[]]和...

if row==[]:
    l.remove(row)

...但两者都什么都不做,并且两者都没有错误代码。这是我的 csv 文件:

1,2,5,4
2,3
43,65,34,56,7

0,5
7,8,9,6,5

33,45,65,4

如果我运行代码,我会得到[]第4行和第6行(它们是空的)。

2 个答案:

答案 0 :(得分:1)

这适用于我的机器:

import csv

def RepresentsInt(i):
    try:
       int(i)
       return True
    except ValueError:
       return False
l = []

with open('Test.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')

    for row in reader:
        l.append([int(r) for r in row if RepresentsInt(r)])

    rows = [row for row in l if row]
    for row in rows:
        print(row)

答案 1 :(得分:0)

目前还不清楚你在使用statistics模块做了什么,但是下面的程序应该是你要求的。导入pprint模块以使显示生成的表更容易阅读。如果这个答案解决了你问题中出现的问题,但你在其他地方遇到了困难,请确保打开另一个针对新问题的问题。

#! /usr/bin/env python3
import csv
import pprint


def main():
    table = []
    # Add rows to table.
    with open('Test.csv', newline='') as file:
        table.extend(csv.reader(file))
    # Convert table cells to numbers.
    for index, row in enumerate(table):
        table[index] = [int(value) if value.isdigit() else 0 for value in row]
    # Remove zeros from the rows.
    for index, row in enumerate(table):
        table[index] = [value for value in row if value]
    # Remove empty rows and display the table.
    table = [row for row in table if row]
    pprint.pprint(table)


if __name__ == '__main__':
    main()