我已经检查过并与其他问题进行比较,但我找不到解决方案。 我打开一个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']
[]
[]
[]
答案 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