【问题标题】:Can't read log file but can read after copy paste to notepad无法读取日志文件,但复制粘贴到记事本后可以读取
【发布时间】:2018-10-08 01:10:11
【问题描述】:

任务:

我的任务是比较sha1_vsdt.csv中第一列中的字符串和trendx.log中的字符串:当匹配时,它应该获取日志文件中的描述,然后将其放入csv的第三列,否则不被发现

但是trendx.log 无法读取,我所做的是 - 我复制了 trendx.log 的内容,然后将其粘贴到记事本中,然后保存后,它是可读的。 这是可读的日志文件 - trend2.log。我认为 unicode 格式是问题所在。

我怎样才能阅读这个日志文件呢?无论如何要转换这个?我已经尝试使用utf-16le 对其进行编码,但我只打印了 3 行

这是我的代码

import numpy as np
import pandas as pd
import csv
import io
import shutil


pd.set_option('display.max_rows', 1000)
logtext = "trendx.log"

#Log data into dataframe using genfromtxt
logdata = np.genfromtxt(logtext,invalid_raise = False,dtype=str, comments=None,usecols=np.arange(16))
logframe = pd.DataFrame(logdata)
#print (logframe.head())

#Dataframe trimmed to use only SHA1, PRG and IP
df2=(logframe[[10,11]]).rename(columns={10:'SHA-1', 11: 'DESC'})
#print (df2.head())

#sha1_vsdt data into dataframe using read_csv
df1=pd.read_csv("sha1_vsdt.csv",delimiter=",",error_bad_lines=False,engine = 'python',quoting=3)
#Using merge to compare the two CSV

df = pd.merge(df1, df2, on='SHA-1', how='left').fillna('undetected')
df1['DESC'] = df['DESC'].values

df1.to_csv("sha1_vsdt.csv",index=False)

使用 csv 输出:trendx.log all 在第 1 - 584 行中未被检测到

在 csv 中使用正确的输出:trend2.log

【问题讨论】:

  • file 命令有帮助。 file trendx.log => Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators
  • 你能解释一下代码吗,我可以接受

标签: python


【解决方案1】:

此文件被编码为 UTF-16-LE。读取文件时传入encoding标志,如下所示:

logdata = np.genfromtxt(logtext, invalid_raise=False,dtype=str, comments=None,usecols=np.arange(16), encoding='utf_16-le')

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    相关资源
    最近更新 更多