关于python字典类型赋值问题

和平战马 2018-04-24 06:28:58
运行下面的脚本,得到data_all里面每个key对应的value值为什么都是一样的呢。

#file_data.py

# coding:utf-8
# ip, time_local, http_method, url, http_status, body_bytes_sent , http_referer, ua
import re

data_all = {}
data_ev = {}

print("开始提取。。。")
with open("access_temp.log") as f:
count = 1
for line in f.readlines():
line = line.strip('\n')
line = re.split("\s|-", line)
# print(line)
data_ev["ip"] = line[0]
data_ev["time_local"] = line[5].split('[')[1]
data_ev["http_method"] = line[7].split('"')[1]
data_ev["url"] = line[8]
data_ev["http_status"] = line[9]
if line[10] == '-':
data_ev["body_bytes_sent"] = 0
else:
data_ev["body_bytes_sent"] = line[10]
data_ev["http_referer"] = line[11].split('"')
data_ev["ua"] = ' '.join(line[12:23]).split('"')
if data_ev["http_method"] == 'GET':
data_ev["ua"] = data_ev["ua"][3]
else:
data_ev["ua"] = data_ev["ua"][1] + data_ev["ua"][3]
print(data_ev)
data_all[count] = data_ev
# print("已完成"+count+"行。。。")
count += 1
print("data_all = ",data_all)

运行脚本:python file_data.py
最后得到的结果为
data_all = {1: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 2: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 3: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 4: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 5: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 6: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 7: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 8: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 9: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 10: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 11: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 12: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 13: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 14: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 15: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 16: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 17: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 18: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 19: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}, 20: {'ip': '46.72.213.133', 'time_local': '12/Dec/2015:18:39:27', 'http_method': 'POST', 'url': '/administrator/index.php', 'http_status': 'HTTP/1.1"', 'body_bytes_sent': '200', 'http_referer': ['4494'], 'ua': 'http://almhuette raith.at/administrator/Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0'}}

...全文
1112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2018-04-25
  • 打赏
  • 举报
回复
引用 2 楼 和平战马的回复:
[quote=引用 1 楼 oyljerry 的回复:] data_ev = {} 是一个公用对象,每次循环应该创建新的
 for line in f.readlines():
    data_ev = {}
你说的很对,data_ev = {}是公用对象,但我每次把data_ev的值赋给对象data_all存储起来了,但最后data_all里面的values值都是一样的,所以这点不理解。[/quote] Python中都是引用,所以你虽然存了。但最后都是同一个引用。不然你需要deepcopy
和平战马 2018-04-24
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
data_ev = {} 是一个公用对象,每次循环应该创建新的
 for line in f.readlines():
    data_ev = {}
你说的很对,data_ev = {}是公用对象,但我每次把data_ev的值赋给对象data_all存储起来了,但最后data_all里面的values值都是一样的,所以这点不理解。
oyljerry 2018-04-24
  • 打赏
  • 举报
回复
data_ev = {} 是一个公用对象,每次循环应该创建新的
 for line in f.readlines():
    data_ev = {}

37,717

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧