【发布时间】:2020-03-09 14:28:51
【问题描述】:
所以在我发布这个问题之前,我发现了一个与我的问题相似但不准确的问题。 How to parse this text file format into CSV format?
我有一个需要解析的文本文件。
票号:2423
旧源 IPIP:1.1.1.1
旧源端口:50
主机IP:2.2.2.2
主机端口:52
利用:一些随机利用
一堆随机的电子邮件标题垃圾
票号:2423
旧源 IPIP:1.1.1.1
旧源端口:50
主机IP:2.2.2.2
主机端口:52
EXPLOIT:SomeRANDOMexploit
我想解析出所有“一堆随机电子邮件标题垃圾”
解析后,我想格式化要在 CSV 文件中读取的文本并创建标题,然后仅在列中导入下面的数据。最终结果应如下所示:
票号、旧源 IPIP、旧源端口、主机 IP、主机端口、利用
2423, 1.1.1.1, 50, 2.2.2.2, 52, SomeRANDOMexploit
2423, 1.1.1.1, 50, 2.2.2.2, 52, SomeRANDOMexploit
我找到了一种使用以下代码解析行的方法:
import re
filename = "./input.txt"
infile = open(filename, 'r')
lines = infile.readlines()
lines[0:13]
for line in lines:
if re.match("TICKET NUMBER|OLD SOURCE IP|OLD SOURCE PORT|HOST IP|HOST PORT|EXPLOIT", line):
print(line.strip())
infile.close()
这消除了电子邮件标题垃圾。
我只是不知道如何获取数据,然后将其格式化为 CSV,其中冒号可以分隔它并将标题放在列的顶部。
import csv
with open('output.txt', 'r') as in_file:
stripped = [line.replace(":","").split() for line in in_file]
zipped = zip([stripped]*1)
with open('out_file.csv', 'w') as out_file:
writer = csv.writer(out_file)
writer.writerow(('TICKET NUMBER', 'OLD SOURCE IPIP', 'OLD SOURCE PORT', 'HOST IP', 'HOST PORT', 'EXPLOIT'))
for group in zipped:
writer.writerows(group)
上面的代码让我可以很好地编写标题,但它将我的文本文件中的所有内容打印到同一行中的单独列中
输出
TICKET NUMBER, OLD SOURCE IPIP, OLD SOURCE PORT, HOST IP, HOST PORT, EXPLOIT
['TICKET', 'NUMBER2423'] ['OLD', 'SOURCE', 'IPIP', '1.1.1.1'] ['OLD', 'SOURCE', 'PORT', '50'] ['HOST', 'IP2.2.2.2'] ['HOST', 'PORT'] ['EXPLOITSomeRANDOMexploit'] ['TICKET', 'NUMBER2423'] ['OLD', 'SOURCE', 'IPIP', '1.1.1.1'] ['OLD', 'SOURCE', 'PORT', '50'] ['HOST', 'IP2.2.2.2'] ['HOST', 'PORT'] ['EXPLOITSomeRANDOMexploit']
期望的输出
TICKET NUMBER, OLD SOURCE IPIP, OLD SOURCE PORT, HOST IP, HOST PORT, EXPLOIT
2423, 1.1.1.1, 50, 2.2.2.2, 52, SomeRANDOMexploit
2423, 1.1.1.1, 50, 2.2.2.2, 52, SomeRANDOMexploit
据我了解,代码是将冒号替换为空,然后将两个单词合二为一。另外我不知道如何让它们打印到新行。
【问题讨论】:
-
@stovfl 该链接有所帮助,但我仍然遇到问题,如上所示,它会在一行中创建所有内容。
-
不要按照问题代码,使用上一个答案的方法。