我試圖在Python
中創建list
,其中的值從活動的excel
表中拉出。我希望它從excel文件中提取步驟#值並將其附加到列表中,同時還包括該元素的哪個編號。例如,1_1
它第一次拉1,1_2
第二次,1_3
第三,等我的代碼如下......計算列表中的元素並追加列表
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
CellNum = xl.ActiveSheet.UsedRange.Rows.Count
Steps = []
for i in range(2,CellNum + 1): #Create load and step arrays in abaqus after importing from excel
if str(int(xl.Cells(i,1).value))+('_1' or '_2' or '_3' or '_4' or '_5' or '_6') in Steps:
StepCount = 1
for x in Steps:
if x == str(int(xl.Cells(i,1).value))+('_1' or '_2' or '_3' or '_4' or '_5' or '_6'):
StepCount+=1
Steps.append(str(int(xl.Cells(i,1).value))+'_'+str(StepCount))
else:
Steps.append(str(int(xl.Cells(i,1).value))+'_1')
據我所知,沒有Excel文件,該程序將無法運行對於你們任何人,但我只是想知道這是否是我錯過的一些簡單的錯誤。當我運行這個時,StepCount不會高於2,所以我收到一堆1_2,2_2,3_2等元素。我已在下面發佈了我的結果列表。
>>> Steps
['1_1', '2_1', '3_1', '4_1', '5_1', '6_1', '7_1', '8_1', '9_1', '10_1', '11_1', '12_1',
'13_1', '14_1', '1_2', '14_2', '13_2', '12_2', '11_2', '10_2', '2_2', '3_2', '9_2',
'8_2', '7_2', '6_2', '5_2', '4_2', '3_2', '2_2', '1_2', '2_2', '3_2', '4_2', '5_2',
'6_2', '7_2', '8_2', '9_2', '10_2', '11_2', '12_2', '13_2', '14_2', '1_2', '2_2']
編輯#1:所以,如果('_1' or '_2' or '_3' or '_4' or '_5' or '_6')
將永遠只用_1,是這行代碼是與我的櫃檯搞亂?
if x == str(int(xl.Cells(i,1).value))+('_1' or '_2' or '_3' or '_4' or '_5' or '_6'):
,因爲它只使用_1
,只會算1_1
查不1_2, 1_3, 1_4, etc
編輯#2:現在我用下面的代碼。我的輸入列表也在下面。
from collections import defaultdict
StepsList = []
Steps = []
tracker = defaultdict(int)
for i in range(2,CellNum + 1):
StepsList.append(int(xl.Cells(i,1).value))
>>> StepsList
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 14, 13, 12, 11, 10, 2, 3, 9, 8,
7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 2]
for cell in StepsList:
Steps.append('{}_{}'.format(cell, tracker[cell]+1)) # This is +1 because the tracker starts at 0
tracker[cell]+=1
我得到以下錯誤:ValueError: zero length field name in format
從for cell in StepsList:
迭代方框
編輯#3:得到它的工作。出於某種原因,它不喜歡
Steps.append('{}_{}'.format(cell, tracker[cell]+1))
所以我就改成了
for cell in StepsList:
tracker[cell]+=1
Steps.append(str(cell)+'_'+str(tracker[cell]))
感謝您的幫忙!
好的,但如果1_1是在l ist,那麼它應該設置StepCount = 1並遍歷列表元素來計算每次出現1_1,1_2,1_3,否?我的問題似乎是,StepCount或者只是在迭代過程中識別出其中的一個元素,或者StepCount始終將其重置爲1.前者似乎更有可能,但我不明白爲什麼。我是Python的初學者。 – Ryan
不,你會第一次得到1_1,因爲列表中不包含「1_1」,然後是「1_2」,因爲「1_1」已經在列表中,然後再也不會。您唯一要搜索的元素是「X_1」。 – aruisdante
對不起,我解釋得不好。你的第一個錯誤在你的條件下基本上有同樣的錯誤。所以基本上,它只是在尋找''X_1'',一旦找到它就會添加''X_2'',然後引導。 – aruisdante