Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python 3中从csv文件中删除空列表_Python 3.x - Fatal编程技术网

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

Python 3.x 在Python 3中从csv文件中删除空列表,python-3.x,Python 3.x,我一直在编写代码,从csv文件中提取行,并将它们传输到整数列表中,以便进行进一步的数学运算。但是,如果一行结果为空,则会导致问题。此外,用户不知道哪一行是空的,因此解决方案应该是通用的,而不是指向某一行并删除它。代码如下: import csv import statistics as st def RepresentsInt(i): try: int(i) return True except ValueError: return

我一直在编写代码,从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=[如果行中的行对行!=[]]
并且

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行的[](它们是空的)。

这在我的机器上起作用:

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)

目前尚不清楚您正在使用
统计
模块做什么,但下面的程序应该可以满足您的要求。导入
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()

你能提供一个测试CSV文件吗?编辑成问题抱歉英语不好。哦,谢谢你的编辑!尝试将
替换为读卡器中的行:
替换为筛选器中的行(无,读卡器):
我的答案有问题吗?很遗憾,它不起作用。在第一种情况下,代码的运行方式与之前相同。在第二种情况下,我得到了“'int'对象不可编辑”错误。编辑了答案,希望是结果。您能添加所需的输出吗?当然。因此,如果我们采用我在问题中提出的csv值,我想得到:[1,2,4,5][2,3][43,65,34,56,7][0,5][7,8,9,6,5][33,45,65,4]非常感谢!代码确实工作得很好。你能解释一下你的代码的最后两行是做什么的吗?还有,如果我想让零作为我列表的实际值呢。我试图修改代码,但它仍然删除了所有的零。最后两行使代码可以从另一个程序导入,并阻止该程序立即执行。你看过评论了吗?如果希望数据中有零,则需要从代码中删除第14-16行。