如何在文件的一行中打印长字符串

时间:2019-04-23 17:33:35

标签: python python-3.x

我正在从Web服务中接收OData文件,并且我想根据该响应创建一个.csv。我能够正确处理数据,但是某些字段(TCComments和TCComentarioOrden)以不同的行写入文件中。我尝试使用strip()和找到的函数,但未能解决问题

我尝试过的功能是:

def escape_ansi(line):
    ansi_escape =re.compile(r'(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]')
    return ansi_escape.sub('', line)

这是我解码JSon响应并将其写入.csv文件的代码部分:

fo.write("CallID||EarlyStart||DueDate||LateStart||Priority||Region||District||Duration||Latitude||Longitude||Street||Status||TaskTypeCategory||AssignmentStart||AssignmentFinish||AssignedEngineer||TCCanal3||TCCanal50||TCCanal70||TCCanal110||TCCanal116||TCAccion||TCAfectacion||TCComments||TCtipoCierre||TCCodigoCierre||TCComentarioOrden\n")

for task in resultadoJson:
    CallID = task["CallID"]
    EarlyStart = task["EarlyStart"]
    DueDate = task["DueDate"]
    LateStart = task["LateStart"]
    Priority = str(task["Priority"])
    Region = task["Region"]["@DisplayString"]
    District = task["District"]["@DisplayString"]
    Duration = str(task["Duration"])
    Latitude = str(task["Latitude"])
    Longitude = str(task["Longitude"])
    Street = task["Street"]
    Status = task["DisplayStatus"]["@DisplayString"]
    TaskTypeCategory = task["TaskTypeCategory"]["@DisplayString"]
    AssignmentStart = task["AssignmentStart"]
    AssignmentFinish = task["AssignmentFinish"]
    try:
        AssignedEngineer =  task["AssignedEngineer"]["@DisplayString"]
    except:
        AssignedEngineer =  'Sin asignar'
    TCCanal3 = str(task["TCCanal3"])
    TCCanal50 = str(task["TCCanal50"])
    TCCanal70 = str(task["TCCanal70"])
    TCCanal110 = str(task["TCCanal110"])
    TCCanal116 = str(task["TCCanal116"])
    TCAccion =  task["TCAccion"]["@DisplayString"]
    TCAfectacion =  task["TCAfectacion"]["@DisplayString"]
    TCComments = escape_ansi(task["TCComments"])
    TCComments = TCComments.strip()
    try:
        TCtipoCierre =  task["TCtipoCierre"]["TCVisualName"]
    except:
        TCtipoCierre =  ''
    try:
        TCCodigoCierre =  task["TCCodigoCierre"]["TCVisualName"]
    except:
        TCCodigoCierre =  ''
    TCComentarioOrden = escape_ansi(task["TCComentarioOrden"])
    TCComentarioOrden= TCComentarioOrden.strip()
    fo.write(CallID+"||"+EarlyStart+"||"+DueDate+"||"+LateStart+"||"+Priority+"||"+Region+"||"+District+"||"+Duration+"||"+Latitude+"||"+Longitude+"||"+Street+"||"+Status+"||"+TaskTypeCategory+"||"+AssignmentStart+"||"+AssignmentFinish+"||"+AssignedEngineer+"||"+TCCanal3+"||"+TCCanal50+"||"+TCCanal70+"||"+TCCanal110+"||"+TCCanal116+"||"+TCAccion+"||"+TCAfectacion+"||"+TCComments+"||"+TCtipoCierre+"||"+TCCodigoCierre+"||"+TCComentarioOrden+"\n")

fo.close()

这是TCComments字段中的示例:

""TCComments": "Variacion en el SNR, generando conteo de errores.\n\nCable9/0/1-upstream0 (QU21A)\tqam64\t6.4\t24\t37.8\t1.7\t14\t100%\t33\tok\tok\t142\t   \nCable9/0/1-upstream1 (QU21A)\tqam64\t6.4\t24\t31.4\t1.8\t12\t94%\t37\tok\tok\t167\t   \nCable9/0/1-upstream2 (QU21A)\tqam64\t6.4\t24\t23.6\t1.5\t8\t89%\t33\tok\t7%\t247\t   \nCable9/0/1-upstream3 (QU21A)\tqam64\t3.2\t12\t18.8\t1.2\t6\t100%\t34\tok\tok\t227\t   \n""

这是来自TCComentarioOrden字段的示例:

 "TCComentarioOrden": "Óptico ubicado en condarco 2296. Se identifican puertos 4,5,2 y 1 con ingress más comprometidos. \nSe trabaja en puerto 4.\nHgd en ayolas 1672, se identifica salida main, aux1 y aux2 con ingress. \nSe filtra abonado de ayolas 1613 en tap 32x8 en misma altura. \nSe ajusta abonado flojo en tap 32x4 en ayolas misma altura de activo.\nSe ajusta abonado flojo en tap 20x8 en ayolas 1558.\nSe filtra abonado de condarco 2320 en tap 29x8 al 2332.\nHgd en Irala 1605, se identifica aux2 con ingress. \nSe ajusta abonado flojo en tap 32x8 en Irala 1662.\nSe trabaja puerto 5.\nHgd en ayolas 1879, se identifica aux1 y aux2 con ingress. \nSe ajusta abonado flojo en tap 11x2 final en av la plata 2204.\nSe filtra abonado de ayolas 1724 en tap 8x2 final en misma altura. \nHgd en husares 2570, se identifica aux1 y salida main con ingress. \nSe filtra abonado de triunvirato 1829 en tap 20x2 misma altura. \nSe filtra abonado de triunvirato 1757 en tap 32x4 en misma altura. \nSe debe continuar trabajando por lo tanto se suspende ticket. 5 filtros "

如您所见,这些字段具有转义字符。

这是我导入.csv文件时发生的情况:

enter image description here

我希望导入文件看起来像这样:

enter image description here

谢谢您的时间

1 个答案:

答案 0 :(得分:4)

使用str.replace()方法。 fo.write(TCComments.replace('\n', ''))

或者,您也可以在escape_ansi()中进行此操作:return ansi_escape.sub('', line).replace('\n', '')

(当然,您可能需要用空格(' ')代替空字符串。)