我是Python的新手,我试图将列表的长度输出为单个整数,例如:
l1 = ['a', 'b', 'c']
len(l1) = 3
但是,它在cmdline上打印,页面下方有1秒,例如: 1 1 1 1 1 1 等
如何才能输出数字而不是1的列表?
(这里是代码:)
def Q3():
from datetime import datetime, timedelta
inputauth = open("auth.log", "r")
authStrings = inputauth.readlines()
failedPass = 'Failed password for'
for line in authStrings:
time = line[7:15]
dateHour = line[0:9]
countAttack1 = []
if time in line and failedPass in line:
if dateHour == 'Feb 3 08':
countAttack1.append(time)
length1 = len(countAttack1)
print(length1)
理想情况下,我希望在打印中输出数字,以便我可以格式化它,也就是说:
print("Attack 1: " + length1)
答案 0 :(得分:1)
我认为你是循环的,ifs在循环中。如果是这样,只需打印循环范围外的长度。 请分享完整的代码以获得更好的答案
答案 1 :(得分:1)
正如Syed Abdul Wahab所说,问题在于"列表"正在重新创建每个循环。这使得打印报告" 1",因为它是列表的实际长度。 另一个问题是,printng的重复是类似的 - 你实际上是打印"每次都在循环中#34;。
解决方案很简单:在循环外初始化列表;并在循环外报告。
def Q3():
from datetime import datetime, timedelta
inputauth = open("auth.log", "r")
authStrings = inputauth.readlines()
failedPass = 'Failed password for'
countAttack1 = [] # after this line the countAttack will be empty
for line in authStrings:
time = line[7:15]
dateHour = line[0:9]
if time in line and failedPass in line:
if dateHour == 'Feb 3 08':
countAttack1.append(time)
length1 = len(countAttack1)
print("Attack 1: " + str(length1))
我还想花一些时间将您链接到string formatting虽然文档很复杂但它会使打印变得更加容易,上面的打印结果变成了:
print("Attack 1: {0}".format(length1))
<小时/> 进一步分析代码会给出一些特殊性,您可以检查
time
字符串中是否line
。 - 但是,您只需从上面的一些代码行创建time
的{{1}} - 所以它始终位于line
内。 (除了行的长度不正确的边缘情况,但是反正的错误)。因此if语句应简化为:
line
答案 2 :(得分:0)
这是打印长度的函数:
def print_length():
if time in line and failedPass in line:
if dateHour == 'Feb 3 08':
countAttack1.append(time)
length1 = len(countAttack1)
print(length1)
print_length()
>>>Print length of the List.