8
respostas

Como transferir a saída das funções para um arquivo?

Gostaria de jogar todas as saídas dos comandos para uma arquivo.txt ao invés de sair na tela.

A ideia é gerar um arquivo assim para cada saída:

"comando"

saída do comando

Uma parte do script é:

import pandas as pd
import numpy as np

colunas = ['srcip','sport','dstip','dsport','proto','state','dur','sbytes', 'dbytes','sttl','dttl',
                 'sloss','dloss','service','Sload','Dload','Spkts','Dpkts','swin','dwin','stcpb','dtcpb',

                 'smeansz','dmeansz','trans_depth','res_bdy_len','Sjit','Djit','Stime','Ltime','Sintpkt',

                 'Dintpkt','tcprtt','synack','ackdat','is_sm_ips_ports','ct_state_ttl','ct_flw_http_mthd',
                 'is_ftp_login','ct_ftp_cmd','ct_srv_src','ct_srv_dst','ct_dst_ltm','ct_src_ltm','ct_src_dport_ltm',
                 'ct_dst_sport_ltm','ct_dst_src_ltm','attack_cat','Label' ]


UNSW1 = pd.read_csv('/home/users/p02543/ddos/UNSW-NB15_1.csv',dtype={"srcip":object ,},names = colunas)



UNSW1.head(20)

UNSW1.info()

Como fazer?

Eu tentei:

arquivo= open("DDoS.txt","w+")
arquivo.write("UNSW1.head(20)")
arquivo.write(UNSW1.head(20))

Erro:

 File "DDos.py", line 110, in <module>
    arquivo.write(UNSW1.head(20))
TypeError: write() argument must be str, not DataFrame

Alguma ideia melhor?

8 respostas

Oi, Edson! Você pode usar o método to_string() do tipo DataFrame:

arquivo= open("DDoS.txt","w+")
arquivo.write(UNSW1.head(20).to_string())

Abraços e bons estudos!

@Yan Orestes: Obrigado! A única abordagem para jogar as saídas do programa, é pegar cada uma delas e fazer um arquivo.write ?

Olha, com Python puro é sim. Não sei se o pandas tem alguma funcionalidade especial para isso, mas creio que o jeito é esse mesmo

@Yan Orestes :

Como gravar cada saída pulando linha? Não existe um writeln()!

É só adicionar uma quebra de linha no .write():

arquivo.write(UNSW1.head(20).to_string() + '\n')

Estou recebendo erro de encoding:

https://imgur.com/a/HMCAXNS

O que estou errando?

Edson, você está tentando passar dois argumentos pro construtor str(). O que acontece é que o segundo argument é tratado como o encoding, e você está passando um número. Eu suponho que você queira só escrever esses dois valores em uma linha no seu arquivo, certo? Se for isso, usar a formatação de strings, assim:

arquivo.write('{} {}'.format(scores.mean() * 100, scores.std() * 2))

@Yan Orestes: Obrigado!