尝试从一个从两个函数打印的函数返回一个数据集

时间:2015-06-11 13:56:50

标签: python list csv input

在这个程序中我试图让dataPrinter()函数只返回一组数据。现在该程序运行良好,但我希望它只返回一个包含gen1和gen2数据的数据集。如下所示,我已经尝试创建处理函数,返回每个数据集,然后在生成器中组合它们。但那没用。

import os
os.chdir('C:\Users\U2970\Desktop')
fileData = open('SOUTH_06_01_2015_SECFILE.CSV','rb')
##fullSet = open('2015_FILES_COMBINED.CSV','rb')
columns_no = 3

def headerBody(columns_no):
    columns = [] ## returns the created header of a csv file
    for i in range(columns_no):
        text = raw_input("Enter column #%d name: " % i)
        columns.append(text)
    return columns

def dataBody(columns_no):
    segmentLines = [] ## returns the body of the csv file
    for line in fileData.readlines():
        segmentLine = line.split(',')
        segmentLines.append(segmentLine[:columns_no])
    return segmentLines

def dataPrinter(): ## How can I make this function return one set
                   ## of data that combines both the data from
                   ## gen1 and gen2?
    gen1 = headerBody(columns_no)
    gen2 = dataBody(columns_no)
    print','.join(gen1)
    for row in gen2:
        print','.join(row)
dataPrinter()

## Data handlers I  made that give me very limited success ##
def headerHandler():
    gen1 = headerBody(columns_no)
    return','.join(gen1)

def bodyHandler():
    gen2 = dataBody(columns_no)
    for row in gen2:
        return','.join(row)

def combinedPrinter():
    newList = []
    gen1 = headerHandler()
    gen2 = bodyHandler()
    for line in gen1:
        newList.append(line)
    for line in gen2:
        newList.append(line)
    return newList

1 个答案:

答案 0 :(得分:2)

Python中最好的部分是动态创建新对象非常容易。您可以使方法返回两个值的元组。

def dataPrinter(): 
    gen1 = headerBody(columns_no)
    gen2 = dataBody(columns_no)
    return gen1, gen2

从调用方面,您可以将它们作为单个元组对象获取,也可以解压缩为两个变量。

response = dataPrinter()
print response[0] # prints header
print response[1] # prints body

或者

header, body = dataPrinter()
print header
print body

print header + '\n' + body

额外的琐事: - 如何在python中交换两个变量的值? a,b = b,a。就是这样。