正在尝试编写python CSV ex

2024-09-30 04:31:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个完全的编程新手,这是我第一个真正的程序,我试图写。你知道吗

所以我有一个巨大的CSV文件(数百列和数千行),我试图根据字段中的值只提取很少的列。它工作得很好,我得到了很好的输出,但是当我试图在一个函数中封装相同的逻辑时,问题就出现了。 它只返回第一个提取的行,但是打印工作正常。你知道吗

为了这个我已经玩了好几个小时,在这里读了其他的例子,现在我的脑子乱七八糟的。你知道吗

import csv
import sys

newlogfile = csv.reader(open(sys.argv[1], 'rb'))
outLog = csv.writer(open('extracted.csv', 'w'))

def rowExtractor(logfile):
    for row in logfile:
        if row[32] == 'No':
            a = []
            a.append(row[44])
            a.append(row[58])
            a.append(row[83])
            a.append(row[32])
            return a

outLog.writerow(rowExtractor(newlogfile))

Tags: 文件csvimport程序编程sysopenrow
2条回答

您过早退出。当您将return a放入for循环中时,在第一次迭代时会调用return。这意味着只有firs迭代运行。你知道吗

一个简单的方法是:

def rowExtractor(logfile):
    #output holds all of the rows
    ouput = []
    for row in logfile:
        if row[32] == 'No':
            a = []
            a.append(row[44])
            a.append(row[58])
            a.append(row[83])
            a.append(row[32])
            output.append(a)
    #notice that the return statement is outside of the for-loop
    return output
outLog.writerows(rowExtractor(newlogfile))

您还可以考虑使用yield

函数中有一个return语句…当它到达该行时,它将返回(从而终止循环)。你需要yield。你知道吗

What does the "yield" keyword do in Python?

相关问题 更多 >

    热门问题