Python Write Header Once循环工作不正常

2024-06-30 08:53:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个“订单文件”与标题和细节行。我成功地将订单头写入文件,但似乎只有一个细节行被写入文件。在

for k, v in atlantic_billing.iteritems():
    XHORNO = str(digits + counter)
    XHCSNO = k
    print XHCSNO
    machines = v
    line = 1
    counter = counter + 1
    header_written = False
    try :
        for machine in machines :
            XDORNO = XHORNO
            XDORSQ = line
            line = line + 1
            XDITD1 = ranpak_dict[machine]['MODEL']
            XDITD2 = ranpak_dict[machine]['SN']
            XDCAVC = ranpak_dict[machine]['TOTAL']
            print XDORSQ, XDITD1, XDITD2, XDCAVC
            if XDCAVC > 0 :
                if header_written == False :
                    with open(XHORNO + ".txt", 'w') as order:
                        order.write("H01, " + XHORNO + ", " + XHCSNO + "\n")
                        order.write("D01," + str(XDORSQ) + ", " + ' EQPRANUSER, ' + XDITD1 + ", " +  XDITD2 + ", " + XDCAVC + "\n")
                else :
                    order.write("D01," + str(XDORSQ) + ", " + ' EQPRANUSER, ' + XDITD1 + ", " +  XDITD2 + ", " + XDCAVC + "\n")
                    success.append(machine)
                    header_written = True

    except KeyError, e:
        issues.append(machine)

Tags: 文件linecounterordermachineheaderstrwritten
3条回答

你只需要打开文件一次,而不是在循环内

for k, v in atlantic_billing.iteritems():
    XHORNO = str(digits + counter)
    with open(XHORNO + ".txt", 'w') as order: # < - here you go
        XHCSNO = k
        print XHCSNO
        machines = v
        line = 1
        counter = counter + 1
        header_written = False
        try :
            for machine in machines :
                XDORNO = XHORNO
                XDORSQ = line
                line = line + 1
                XDITD1 = ranpak_dict[machine]['MODEL']
                XDITD2 = ranpak_dict[machine]['SN']
                XDCAVC = ranpak_dict[machine]['TOTAL']
                print XDORSQ, XDITD1, XDITD2, XDCAVC
                if XDCAVC > 0 :
                    if header_written == False :

                        order.write("H01, " + XHORNO + ", " + XHCSNO + "\n")
                        order.write("D01," + str(XDORSQ) + ", " + ' EQPRANUSER, ' + XDITD1 + ", " +  XDITD2 + ", " + XDCAVC + "\n")
                    else :
                        order.write("D01," + str(XDORSQ) + ", " + ' EQPRANUSER, ' + XDITD1 + ", " +  XDITD2 + ", " + XDCAVC + "\n")
                        success.append(machine)
                        header_written = True

        except KeyError, e:
            issues.append(machine)

打开文件时,应使用"A"模式,否则文件将在每次循环时被覆盖(一次又一次):

 with open(XHORNO + ".txt", 'a') as order:
     ...

https://docs.python.org/3/library/functions.html#open

另一个选择是将with块置于for块之上。在

试试这个:

for k, v in atlantic_billing.iteritems():
    XHORNO = str(digits + counter)
    XHCSNO = k
    print XHCSNO
    machines = v
    line = 1
    counter = counter + 1
    header_written = False
    try :
        for machine in machines :
            XDORNO = XHORNO
            XDORSQ = line
            line = line + 1
            XDITD1 = ranpak_dict[machine]['MODEL']
            XDITD2 = ranpak_dict[machine]['SN']
            XDCAVC = ranpak_dict[machine]['TOTAL']
            print XDORSQ, XDITD1, XDITD2, XDCAVC
            if XDCAVC > 0 :
                with open(XHORNO + ".txt", 'a') as order:
                    if header_written == False :
                        order.write("H01, " + XHORNO + ", " + XHCSNO + "\n")
                        order.write("D01," + str(XDORSQ) + ", " + ' EQPRANUSER, ' + XDITD1 + ", " +  XDITD2 + ", " + XDCAVC + "\n")
                        header_written = True
                    else :
                        order.write("D01," + str(XDORSQ) + ", " + ' EQPRANUSER, ' + XDITD1 + ", " +  XDITD2 + ", " + XDCAVC + "\n")
                        success.append(machine)

    except KeyError, e:
        issues.append(machine)

相关问题 更多 >