将输出写入文本文件

时间:2018-01-12 02:59:38

标签: python python-3.x

我已经检查过并与其他问题进行比较,但我找不到解决方案。 我打开一个tile文本,我从这个文件中获取IP地址,但我无法将此信息写入新的文本文件。 我的输出文件只显示我日志的最后一行。只有这个[]

我的第二个问题是,在将其写入新文本文件之前,我希望使用相同的IP地址进行分组。

import re

in_file = open("D:\BLOCK\log")
out_file = open("D:\BLOCK\output.txt", "w")

for line in in_file:
        ipki = re.findall( r'[0-9]+(?:\.[0-9]+){3}', line )
        print(ipki) 

out_file.write(str(ipki))   
file.close() 




print(ipki) 
['70.31.28.181']
['70.31.28.181']
['70.31.28.181']
['130.43.58.196']
['130.43.58.196']
['130.43.58.196']
[]
[]
[]

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,您的问题是您继续在ipki循环中替换for并且只在最后写入其最终值。 re.findall返回零个或多个匹配字符串的列表 - 由于输出文件包含空列表("[]")的字符串表示,这意味着输入文件的最后一行没有匹配。< / p>

您可以添加处理以将找到的ip4地址添加到主列表中,但由于re.findall可以处理大块文本,因此更容易一次读取整个文件并让它为您完成。获得列表后,可以在编写结果文件之前使用set删除重复项。

>>> import re
>>> with open('log') as fp:
...     ip4addrs = set(re.findall(r'[0-9]+(?:\.[0-9]+){3}', fp.read()))
... 
>>> with open('output.txt', 'w') as fp:
...     fp.write('\n'.join(ip4addrs))
... 
26
>>> print(ip4addrs)
{'130.43.58.196', '70.31.28.181'}
>>> print(open('output.txt').read())
130.43.58.196
70.31.28.181