猿问

如何在python中一次处理文件的一行

根据@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



基本上我需要做的是打开一个文件,读取一行并检查它包含哪些数字,如果它包含特定数字,则在 Excel 单元格中输入一个值并移至下一行。除了实际循环遍历这些行之外,一切正常......代码只读取一行并将相同的值放入所有单元格中,即使每一行包含不同的数字组合。


如果您能帮我解决它,我将不胜感激,因为我已经盯着它看了好几个小时了,我真的没有看到它(我很确定这是一个简单的逻辑错误)


湖上湖
浏览 169回答 1
1回答

翻翻过去那场雪

我认为你想要做的是这样的:from ast import literal_evalwith open ("numbers.txt") as inFile:    lines = inFile.readlines()    for i, line in enumerate(lines,1): #start with 1 because excel row start with index = 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        if 2100 in line_number:            cell2100_a = sheet.cell(row=i,column=25)            cell2100_a.value = number        if 2600 in line_number :            cell2600 = sheet.cell(row=i,column=30)            cell2600.value = number        if 1500 in line_number :            cell1500 = sheet.cell(row=i,column=34)            cell1500.value = number        if 800 in line_number :            cell800 = sheet.cell(row=i,column=33)            cell800.value = number        if 3700 in line_number :            cell3700 = sheet.cell(row=i,column=40)            cell3700.value = number我改变了什么:我将输入字符串评估为一个元组。原因是,例如,如果您在字符串中查找字符串 800,(1800, 2100, 2600, 1500, 900, 3700)您会找到匹配项,因为 1800 中有 800。因此,为了避免这种情况,我对其进行了评估,现在我正在研究一个正确数字的元组,因此只有当数字 800 在元组中时它才会匹配,而在上面的示例中不是这种情况。您有 2 个 for 循环,而第 2 个 for 循环是不必要的。我认为您希望 txt 文件的每一行都与您的 excel 文件中的行相对应。但是使用您的第二个 for 循环,您会覆盖之前发生的每个匹配项,在最坏的情况下,您将拥有一个完整的 excel,并且仅针对最后一行评估相同的值。基本上,您只需为每行写入一次值,而不是多次。else部分是不必要的,pass我删除了它。
随时随地看视频慕课网APP

相关分类

Python
我要回答