【发布时间】:2016-11-11 17:41:44
【问题描述】:
我根据播放列表的大小将播放列表上传到目录中。
首先我将以下dict 上传到一个空目录:
playlist_pre = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0}}
那么,这个:
playlist_pos = {'user1': {u'With Or Without You - Jo Whiley Show - BBC Live Session': 1.0, u'Codex': 1.0, u'Daydreaming': 1.0, u'The Man Who Sold The World - 2015 Remastered Version': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Sparks': 1.0, u'Videotape': 1.0, u'Asleep - 2011 Remastered Version': 1.0, u'Pyramid Song': 1.0, u'Nude': 1.0}}
这就是我一次又一次地将播放列表上传到目录的方式:
if os.path.exists('db/user1.json'):
if len(playlist_pos['user1'].values()) < 3:
with open('db/user1.json', 'r+') as f:
db = playlist_pos
db = json.load(f)
# increment track count
updateTrackCounts(db,value=1.0)
#update json here
f.seek(0)
f.truncate()
json.dump(db, f)
print (db)
else:
with open('db/user1.json', 'r+') as f:
db = playlist_pos
db = json.load(f)
# increment track count
updateTrackCounts(db,value=1.0)
#update json here
f.seek(0)
f.truncate()
json.dump(db, f)
print (db)
这就是我将第一个 playlist_pre 上传到空目录的方式。
else:
if len(playlist_pre['user1'].values()) < 3:
with open('db/user1.json', 'w') as f:
json.dump(playlist_pre, f)
else:
with open('db/user1.json', 'w') as f:
json.dump(playlist_pre, f)
ps:function 被调用:
def updateTrackCounts(d, value=0):
for i in d:
if isinstance(d[i], dict):
updateTrackCounts(d[i], value)
elif isinstance(d[i], float):
d[i] += value
编辑
这是在playlist_pos 之后生成playlist_pre 时所需的输出:一个新文件加入了前后播放列表;
重复曲目有incremented value,新曲目有default value = 1.0
joined_playlist = {'user1':
{u'Codex': 2.0, u'High And Dry': 2.0, u'Hey': 2.0, u'O': 2.0, u'Videotape': 2.0, u'Pyramid Song': 2.0, u'With Or Without You - Jo Whiley Show - BBC Live Session': 1.0, u'Daydreaming': 1.0, u'The Man Who Sold The World - 2015 Remastered Version': 1.0, u'O': 1.0, u'Sparks': 1.0, u'Asleep - 2011 Remastered Version': 1.0, u'Nude': 1.0}}
【问题讨论】:
-
在我看来,你总是在加载
db = json.load(f)并且总是指向user1.json。 -
我该如何解决这个问题?
-
语句
db = playlist2和db = playslist1后面跟着相同的db = json.load(f):为什么要覆盖变量? -
错误。关心修复代码和答案?
-
我提供了答案。我还注意到一个变量
playlist_short之前没有被引用,所以我认为它与这个示例的playlist1相同。
标签: python file dictionary