我想将字典传递给用户定义的函数,我需要根据字典值进行一些计算。它对我的功能不起作用,但在不使用功能的情况下工作正常。我不确定,代码有什么问题。有什么帮助吗?没有错误消息。
输入:
“13-07-2016 12:55:46”,user,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 12:57:50”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 13:00:43”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 13:01:45”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 13:02:57”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 13:04:59”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 13:06:51”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
“13-07-2016 13:07:56”,用户,192.168.10.100,192.168.10.20,CONNECT,200,“www.abc.com”
代码:
.myDiv > table tr:first-child td {
font-weight: bold;
text-align: center;
}
答案 0 :(得分:2)
A:您应该考虑在脚本末尾调用您的函数:
dico = setdict()
display(dico)
没有它,它们被声明,但没有被使用。
B:您还应该考虑更好的方法来打开文件:
with open(file_name, "rb") as f:
lines = f.readlines()
for line in lines:
# Do stuff with your line
这是在python中打开文件并逐行读取的最佳方法。
C:您正在使用:
line = fo.readline()
# ^ That line is never use after, you will loose all it's datas
for line in fo:
#do stuff on line
我添加了一条评论,向您显示您从第一行丢失了数据。
D:您正在使用全局变量(在fo
内使用setdict()
,更好的方法是通过参数传递它:
fo = open(file_name, "rb")
def setdict(fo):
dico,i={},0
line = fo.readline()
...
setdict(fo)
最后,您可以通过以下方式重写脚本:
def setdict(filename):
dico,i={},0
with open(filename, 'r') as f:
for line in f.readlines():
date, user, proxy_ip, client_ip, access_method, con, sites = line.split(",")
sites = sites.rstrip('\n')
dico[i]= date, user, proxy_ip, client_ip, access_method, con, sites
return dico
def display(dico):
for k,v in dico.items():
print k,v
file_name = sys.argv[1]
dico = setdict(filename)
display(dico)
答案 1 :(得分:1)
使用def
关键字在Python中编写函数时,该函数不会自动执行。您永远不会调用setdict
或display
函数,只是定义它们以便稍后调用它们。
将此行添加到脚本末尾以实际调用您定义的函数:
display(setdict())
或更详细
dico = setdict()
display(dico)