我正在處理需要csv文件的代碼,然後爲csv文件中的每一行返回一個數據點列表。列表將按日期和地點排序。Python列表將打印但不返回
該代碼使列表如何我想要它,但調用時不返回列表。
第一個函數讀取文件並生成數據點。第二個函數調用第一,排序和(希望)返回數據
def CreateDataStructure(data):
allData=[]
with open(data,'r') as data:
dataRead=data.readlines()
for line in dataRead[1:]:
splitList=line.split(",")
dataPoint =[splitList[25],splitList[1],{splitList[19]:splitList[9]}]
allData.append(dataPoint)
sortedData=sorted(allData)
return sortedData
def compileData(filename,counter,sortedData):
if counter==0:
sortedData=CreateDataStructure(filename)
compileData(filename,1,sortedData)
else:
if counter<len(sortedData):
if sortedData[0][0]==sortedData[1][0] and sortedData[0][1]==sortedData[1][1]:#change these back
compDict=dict(list(sortedData[0][2].items())+list(sortedData[1][2].items()))
sortedData[0]=[sortedData[0][0],sortedData[0][1],compDict]
sortedData.pop(1)
compileData(filename,counter,sortedData)
counter=counter+1
else:
sortedData+=[sortedData.pop(0)]
counter=counter+1
compileData(filename,counter,sortedData)
else:
from itertools import groupby
for key, locationGroup in groupby(sortedData, lambda x: x[0]):
bigList=[]
smallList=[]
for date in locationGroup:
smallList.append(date)
bigList.append(smallList)
print bigList
return bigList
print compileData("fakeData.csv",0,[])
當我運行這段代碼,它打印我想要的東西(biglist,這是我在你想知道的情況下粘貼以下),但返回None( noneType對象)。 爲什麼返回和打印給出兩個不同的東西,我該如何解決這個問題?
[[['744701', '40974', {'Alkalinity': '234'}], ['744701', '41018', {'Alkalinity': '252'}], ['744701', '41058', {'Alkalinity': '270.53'}]], [['744701', '40974', {'Alkalinity': '234'}], ['744701', '41018', {'Alkalinity': '252'}], ['744701', '41058', {'Alkalinity': '270.53'}]], [['744701', '40974', {'Alkalinity': '234'}], ['744701', '41018', {'Alkalinity': '252'}], ['744701', '41058', {'Alkalinity': '270.53'}]]]
在代碼中只使用了一個return語句('compileData()')。在某些情況下,您的if語句沒有返回值。 –
我猜你還想交換'bigList = []'和'key,locationGroup ...'這兩行。 另外,您可能需要的是每次調用'compileData'前的返回。 最後但並非最不重要:請在發佈之前檢查代碼格式。 – nitzel
我會提供使用'pandas'來做這種事情的建議,'pandas.read_csv'會在csv文件中讀取,你可以很容易地做'groupby' - 我不完全確定從csv到所需的輸出列表雖然 –