我编写了代码来读取url和IP数据,并将IP作为访问网址的关键。我正在尝试打印IP密钥,然后打印每个网址的访问次数。
问题是当打印到我的文件时,在一些IP之后有一个新行。 这是代码的输出部分:
`for key, value in ipVisit.items():
outputF.write(key + " " + str(len(ipVisit[key]))+ '\n' )`
即使我增加或减少了密钥和访问次数之间的空格数,第三个输出也是唯一一个在一行上的输出。这是输出:
194.33.212.111
28
12.65.4.100
28
205.23.104.49 31
205.23.104.49
29
我的循环是否做了一些愚蠢的事情?我该如何解决这个问题?
答案 0 :(得分:2)
我发现在写入文件时非常有用的一件事就是完全忽略write
方法:
for key, value in ipVisit.items():
print(key + " " + str(len(ipVisit[key])), file=outputF)
如果outputF==None
输出到stdout,这可能会产生很大的副作用,我过去曾使用过命令行程序(传入输出文件与-
或者什么)。
使用print,您将获得您熟悉的换行语义,并且评论者对.rstrip()
的建议将处理任何剩余的错误换行符。
编辑:使用+
运算符避免使用字符串构建也可能是明智的,而是使用format
方法。此外,您已经将值设置为for循环,无需再次索引ipVisit
:
for key, value in ipVisit.items():
print('{} {}'.format(key, len(value)), file=outputF)
# or rstrip if there's still extra newlines
print('{} {}'.format(key.rstrip(), len(value)), file=outputF) # this will only work if you're sure `key` is a str