2016-02-11 62 views
2

我在一個應該讀取CSV文件並將每行寫入XLSX文件的項目中有一段代碼。現在,當我通過命令行運行時,出現錯誤「參數1必須是迭代器」。參數1必須是一個迭代器 - 我做錯了什麼?

下面是相關代碼:

import os 
import openpyxl 
import csv 
from datetime import datetime 
from openpyxl.reader.excel import load_workbook 

... 

plannum = 4 

... 

alldata_sheetname = ("All Test Data " + str(plannum)) 
wb = load_workbook("testingtemplate.xlsx", keep_vba=True) 

... 

ws_testdata = wb.get_sheet_by_name(alldata_sheetname) 

... 

with open("testdata.csv", 'r') as csvfile: 
    table = csv.reader(csvfile) 
    for row in table: 
     ws_testdata.append(row) 

csv_read = csv.reader(csvfile) 

... 

和特定錯誤讀取:「類型錯誤:參數1必須是一個迭代器」,並引用的代碼的最後一行我提供。

因爲它沒有埋怨我第一次用csvfile,它會更好,如果我不喜歡的東西csvfile = open("testdata.csv", "r")而不是使用with(並且是我在做什麼錯在這裏)?如果是這樣的話,還有什麼我需要改變?

感謝任何人的幫助!

+0

你通過你去'csv_read = csv.reader(csvfile)'時關閉該文件。第二步意味着什麼? – bernie

+0

接下來的幾行代碼在繼續之前從CSV中獲取一些變量。 'gcount = sum(1表示csv_read中的行)'是下一行,稍後用於我在xlsx文件中操縱數據的位置。 – DJGrandpaJ

+0

好的,您可以使用另一個'with'語句再次打開文件。 – bernie

回答

3

您在截止日期前關閉文件csv_read = csv.reader(csvfile)。或者,您可以保持文件打開並將所需的變量存儲在變量中,這樣就不必重複執行文件兩次。例如: -

csvfile = open("testdata.csv", "r") 
table = csv.reader(csvfile) 
for row in table: 
    ws_testdata.append(row) 
    # store what you need in variables 
csvfile.close() 
+1

非常感謝! – DJGrandpaJ

+0

非常歡迎。 – bernie

相關問題