为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2022-07-05 17:55:41
根据@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 单元格中输入一个值并移至下一行。除了实际循环遍历这些行之外,一切正常......代码只读取一行并将相同的值放入所有单元格中,即使每一行包含不同的数字组合。如果您能帮我解决它,我将不胜感激,因为我已经盯着它看了好几个小时了,我真的没有看到它(我很确定这是一个简单的逻辑错误)
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我认为你想要做的是这样的:


from ast import literal_eval

with 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

我改变了什么:

  1. 我将输入字符串评估为一个元组。原因是,例如,如果您在字符串中查找字符串 800,(1800, 2100, 2600, 1500, 900, 3700)您会找到匹配项,因为 1800 中有 800。因此,为了避免这种情况,我对其进行了评估,现在我正在研究一个正确数字的元组,因此只有当数字 800 在元组中时它才会匹配,而在上面的示例中不是这种情况。

  2. 您有 2 个 for 循环,而第 2 个 for 循环是不必要的。我认为您希望 txt 文件的每一行都与您的 excel 文件中的行相对应。但是使用您的第二个 for 循环,您会覆盖之前发生的每个匹配项,在最坏的情况下,您将拥有一个完整的 excel,并且仅针对最后一行评估相同的值。基本上,您只需为每行写入一次值,而不是多次。

  3. else部分是不必要的,pass我删除了它。


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信