如何将打印输出保存到Excel表格中

3

我有一个脚本,用于分析PLC标记并读取许多标记,非常多。我想知道如何将打印输出保存为带表格格式的Excel文件。

这是脚本的一部分。

with PLC() as comm:
    comm.IPAddress = '192.168.100.5'
    comm.ProcessorSlot = 0
    ret = comm.GetPLCTime()

    print("Fecha y Hora de Registro Revision Fallas", ret.Value)
    time.sleep(1)
    Estacion = "D2M017"

   #ACTUADOR 1 
   ACTUADOR = comm.Read('D2M_017.Status.Act._1.WBypassed')
   ret = comm.GetPLCTime()
   Numero_Act_EnBypass = 0
   if ACTUADOR.Value == True:
        Sensor = "ACTUADOR 1 WORK SENSOR EN BY PASS"
        Numero_Act_EnBypass = (Numero_Act_EnBypass +1)
       print(Estacion, ret.Value, "D2M017 =",Sensor)
   else:
        Sensor = "ACTUADOR 1 WORK OK"



   ACTUADOR = comm.Read('D2M_017.Status.Act._1.HBypassed')
   ret = comm.GetPLCTime()
   if ACTUADOR.Value == True:
        Sensor = "ACTUADOR 1 HOME SENSOR EN BY PASS"
        Numero_Act_EnBypass = (Numero_Act_EnBypass +1)
        print(Estacion, ret.Value, "D2M017 =",Sensor)
   else:
        Sensor = "ACTUADOR 1 HOME OK"

此部分重复了64次,并最终得到以下结果:

程序结果

我需要将该信息保存到Excel表格中,并分割成以下部分:站点、日期、状态。


不确定是否适用于Excel,但将其保存为 .csv 格式是否可行?Excel 可以轻松加载 .csv 文件。您可以在 Python 中轻松进行 csv 输出,快速搜索即可了解如何操作。 - Boris Lipschitz
2个回答

3

你看过Pandas吗?它有很多强大的表格功能,包括直接导出到Excel。请查看下面的简单代码,希望对你有所帮助。

import pandas as pd
plc_data = pd.DataFrame(columns=['Tag', 'DateTime', 'Actuator', 'Value'], dtype=object)
# Code to get tags e.g.:
for i in range(10):
    # This is just a loop to generate data. In your case put your code to extract data correctly
    plc_tag = 'XXX_{0}'.format(i)
    date_time = '2019-06-{0}'.format(i+5)
    actuator = 'ACTUADOR {0}'.format(i)
    act_value = 'Work Ok'
    temp_dict = {'Tag': plc_tag, 'DateTime': date_time, 'Actuator': actuator, 'Value': act_value}
    plc_data = plc_data.append(temp_dict.copy(), ignore_index=True)     # I have used a copy of the dictionary, although I'm not sure it's fully necessary. 

plc_data.to_excel("output.xlsx", sheet_name='Sheet_name_1', index=False)

完美运作,但我该如何避免覆盖数据?我在行末添加了‘a’,但出现了错误。plc_data.to_excel("output.xlsx", 'a' , sheet_name='Sheet_name_1', index=False) - skaailet
我假设您想要向该文件添加更多行?根据您的情况和目标,可能有更好的选择。但是,您可以简单地将创建数据框架的行plc_data = pd.DataFrame(columns...)替换为plc_data = pd.read_excel("output.xlsx", sheet_name='Sheet_name_1')。这将从现有数据创建数据框架。然后,您可以将新数据附加到数据框架底部。完成后,再次保存到Excel中。它将用新数据覆盖旧文件。您可以通过使用新文件名等更安全地执行此操作-这取决于您。 - Ben

0

有几种处理方法:最简单的方法是使用csv writer,并将其写入文件,而不是仅仅打印到控制台。

以您的代码为基础:可以像这样实现。

import csv

with PLC() as comm:
    with open("output_file.csv",'w') as f:
    csv_writer = csv.writer(f, delimiter=',')
...   
#ACTUADOR 1 
   ACTUADOR = comm.Read('D2M_017.Status.Act._1.WBypassed')
   ret = comm.GetPLCTime()
   Numero_Act_EnBypass = 0
   if ACTUADOR.Value == True:
        Sensor = "ACTUADOR 1 WORK SENSOR EN BY PASS"
        Numero_Act_EnBypass = (Numero_Act_EnBypass +1)
        print(Estacion, ret.Value, "D2M017 =",Sensor)
   else:
        Sensor = "ACTUADOR 1 WORK OK"
   csv_writer.writerow([Estacion, ret.Value,f"D2M017 = {Sensor}"])
   ...

等等。如果您绝对需要将数据写入Excel(.xsl或.xslx)文件,那么有几个可用的软件包:xslxwriter可能是其中最容易使用的之一。https://xlsxwriter.readthedocs.io/

最后:如果您想将任何终端命令的输出保存到文件中,可以使用“管道”将其输出。

在Windows和Linux中,它看起来像这样:python_script.py > myoutputfile.txt


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接