【发布时间】:2020-01-21 12:52:25
【问题描述】:
根据@Boendal 回答编辑。
我一直在编写一个脚本,当我认为一切正常时,结果却没有,我找不到解决方案,甚至找不到我的逻辑为什么不起作用。我对python很陌生,所以如果它很简单,我很抱歉,但我希望看到它起作用。这是问题所在: 我有一个由另一个脚本生成的文本文件,其中包含带有数字组合的行,如下所示:
(1800, 2100, 2600, 1500, 900, 3700)
(1800, 2100, 2600, 900, 800, 3700)
(1800, 2100, 1500, 900, 800, 3700)
(1800, 2600, 1500, 900, 800, 3700)
(1800, 2100, 2600, 1500, 900, 3700)
(1800, 2100, 2600, 900, 800, 3700)
(1800, 2100, 1500, 900, 800, 3700)
(1800, 2100, 2600, 1500, 900, 3700)
(1800, 2100, 2600, 900, 800, 3700)
(1800, 2600, 1500, 900, 800, 3700)
(1800, 2100, 2600, 1500, 900, 3700)
(1800, 2100, 1500, 900, 800, 3700)
(1800, 2600, 1500, 900, 800, 3700)
在另一个使用此文件作为输入的脚本中,我想逐行处理,处理每一行并移至另一行。我想在完成后删除一条线(所以我总是在同一条线上工作)但这似乎更加复杂,所以我决定简单地使用 for 循环。这是一个代码:
(...)
for i, line in enumerate(lines):
i=i+1
line_number = literal_eval(line)
if "1800" in line_number:
cell1800_a = sheet.cell(row=i,column=27)
cell1800_a.value = number
cell1800_b = sheet.cell(row=i,column=29)
cell1800_b.value = number
stf_18 = sheet.cell(row=i,column=50)
stf_18.value = "radio7"
stf18Q = sheet.cell(row=i,column=51)
if number in range (1,2):
stf18Q.value = 1
elif number in range (3,4):
stf18Q.value = 2
elif number in range (5,6):
stf18Q.value = 3
if question1 == "y":
cell1800_2g = sheet.cell(row=i,column=26)
cell1800_2g.value = number
if "2100" in line_number:
cell2100_a = sheet.cell(row=i,column=25)
cell2100_a.value = number
stf18 = sheet.cell(row=i,column=52)
stf18.value = "radio7"
stf18Q = sheet.cell(row=i,column=53)
if number in range (1,2):
stf18Q.value = 1
elif number in range (3,4):
stf18Q.value = 2
elif number in range (5,6):
stf18Q.value = 3
if question2 == "y":
cell2100_b = sheet.cell(row=i,column=24)
cell2100_b.value = number
if "2600" in line_number:
cell2600 = sheet.cell(row=i,column=30)
cell2600.value = number
stf26 = sheet.cell(row=i,column=54)
stf26.value = "radio6"
stf26Q = sheet.cell(row=i,column=55)
if number in range (1,2):
stf26Q.value = 1
elif number in range (3,4):
stf26Q.value = 2
elif number in range (5,6):
stf26Q.value = 3
if "1500" in line_number:
cell1500 = sheet.cell(row=i,column=34)
cell1500.value = number
stf15 = sheet.cell(row=i,column=48)
stf15.value = "radio5"
stf15Q = sheet.cell(row=i,column=49)
stf15Q.value = number
if "900 "in line_number:
if question1 == "y":
cell900_A = sheet.cell(row=i,column=31)
cell900_A.value = number
stf9 = sheet.cell(row=i,column=46)
stf9.value = "radio4"
stf9Q = sheet.cell(row=i,column=47)
stf9Q.value = number
if question2 == "y":
cell900_B = sheet.cell(row=i,column=32)
cell900_B.value = number
stf9 = sheet.cell(row=i,column=46)
stf9.value = "radio3"
stf9Q = sheet.cell(row=i,column=47)
stf9Q.value = number
if "800" in line_number:
cell800 = sheet.cell(row=i,column=33)
cell800.value = number
stf8 = sheet.cell(row=i,column=44)
stf8.value = "radio2"
stf8Q = sheet.cell(row=i,column=45)
stf8.value = number
if "3700" in line_number:
cell3700 = sheet.cell(row=i,column=40)
cell3700.value = number
stfa = sheet.cell(row=i,column=87)
stfa.value = "radio1"
stfaq = sheet.cell(row=i,column=88)
stfaq.value = number
(...)
基本上我需要做的是打开一个文件,读取一行并检查其中包含哪些数字,如果它包含特定数字,则在 Excel 单元格中输入一个值并移至下一行。除了实际循环各行之外,一切正常...代码只读取一行并将相同的值放入所有单元格中,即使每一行包含不同的数字组合。
如果你能帮我解决它,我将非常感激,因为我已经盯着它看了好几个小时了,我真的没有看到它(我很确定这是一个简单的逻辑错误)
【问题讨论】:
-
通过你的行的迭代是正确的,尽管有更简单的方法来实现它。您是否知道您要查找的所有数字都存在于您作为示例代码提供的所有行中?除此之外,请注意您正在为行中的每个
i覆盖cell2100_a。也许您正在寻找一种“附加”数据的方法? -
你在哪里将
number的值传递给变量number -
您可以直接使用您的列表进行迭代(这里是每个读取的行)
-
@offeltoffel 他们中的大多数是的,只有很小的差异。例如,第一行 (1800, 2100, 2600, 1500, 900, 3700) 包含 1500,而第二行没有,而是包含 800。 (1800, 2100, 2600, 900, 800, 3700)。无论如何,如果代码是正确的,这意味着我的逻辑在这里的其他地方不起作用......当你说我覆盖 cell2100_a (我不知道)是只有这一个还是实际上全部?
-
@Clément number 和所有其他变量都在代码的其他部分,因此 (...) 在代码块的两端。