2017-08-08 42 views
1

我想從幾個xlsx文件中添加特定的行到我的python腳本列表中。我試圖添加的行是列號4(E列)的單元格值減去列編號1(B列)的單元格值不等於0的行。我的xlsx文件如下所示:使用zip的類型錯誤

A B C D E F G H 
1 A10 2  A10 2    AB 
2 A105 1  A105 2    AB  

因此,對於下面的代碼,我希望將第二行添加到打開的列表數字中,因爲2-1的總和不是0.然後,我想通過將它們添加到列列表中來對它們進行排序,然後將它們放入一個新的列表,主列表,一切排序。這裏是我的代碼:

import logging 
import pandas as pd 
from openpyxl import Workbook, load_workbook 
import glob 
from openpyxl.utils.dataframe import dataframe_to_rows 

numbers = [] 
rapp = r"C:\Myfolder" 
files = glob.glob(rapp) 
for file in files: 
    df = pd.read_excel(file) 
    numbers = df.iloc[:, 4], df.iloc[:,1][df.iloc[:, 4] - df.iloc[:,1] != 0].tolist() 
excel_input = load_workbook(excelfile) 
ws = excel_input.active 
for r in dataframe_to_rows(df, index=True, header=True): 
    ws.append(r) 
else: 
    pass 

col1 = [] 
col2 = [] 
col4 = [] 
col5 = [] 
col7 = [] 
col8 = [] 

mainlist = [] 
try: 
    for row in numbers: 
     col1.append(ws.cell(row=row, column=1).value) 
     col2.append(ws.cell(row=row, column=2).value) 
     col4.append(ws.cell(row=row, column=4).value) 
     col5.append(ws.cell(row=row, column=5).value) 
     col7.append(ws.cell(row=row, column=7).value) 
     col8.append(ws.cell(row=row, column=8).value) 
except AttributeError: 
    logging.error('Something is wrong') 
finally: 
    for col1, col2, col4, col5, col7, col8 in zip: #Error 
     mainlist.append(col1, col2, col4, col5, col7, col8) 
return mainlist 

以下是錯誤:

Traceback: 
    for col1, col2, col4, col5, col7, col8 in zip 
TypeError: 'type' object is not iterable. 

這是給我的錯誤。 我知道這裏有一些錯誤,我很抱歉,但這是我可以提出來解決我的任務最好的。任何人都可以在我的路上幫助我嗎?我會非常感激!我是python的新手。在Python 3.4.1中工作。

+0

請編輯您的問題以包含您遇到的具體錯誤。還請查看[最低限度,完整,可驗證的示例]的幫助頁面(https://stackoverflow.com/help/mcve) – wnnmaw

+0

錯誤已經寫入那裏,但我已經在腳本中的位置添加了註釋。 – Pexe

+0

如何排序,我不明白這部分......「然後,我想通過將它們添加到列列表中進行排序,然後將它們放入一個新的列表,mainlist,在那裏一切排序」 – DJK

回答

1

你的問題是你使用zip,這是一個你永遠不會定義的變量。但是,因爲zip()built-in function,它返回zip-class object,這是令人困惑的事情。

for col1, col2, col4, col5, col7, col8 in zip:正試圖找到一個名爲zip的迭代器和6個子組件。由於zip()是內置的,因此Python將此行讀爲「遍歷zip類型」,但類型不可迭代,因此您會收到相應的錯誤。假如你選擇了一些東西,是不是內置的,你會得到一個NameError

你的例子是有點不清楚,但我相信你可以使用下面的finally塊(proof of concept)修復它:

finally: 
    columns = zip(col1, col2, col4, col5, col7, col8) 
    for column in columns: 
     mainlist.append(column) 
+0

我很抱歉這個表達不佳的問題,我真的很困惑自己真相被告知!非常感謝你的回答,這清除了我對使用zip的誤解。你是否也想過如何將整個行從xlsx文件添加到列表中?在列4中的單元格值減去列1中的單元格值不等於0的所有行中,我希望將整行添加到列表中。我現在正在寫它的方式我不工作(數字= df.iloc [:,4],df.iloc [:,1] [df.iloc [:,4] - df.iloc [:,1] != 0] .tolist())。它只給我列4和1的單元格值。 – Pexe