我的播放列表是字典的列表,大概看起来像这样:[{'url':url1,'title':title1}, {'url':url2,'title':title2}]
当然,播放列表有一个名字,name1
我想做的是在一个函数中,将它保存到CSV文件中。我的愿望是整个字典可以只是CSV文件中的一个项目,而不是将字典划分为多个列。然后我想有另一个函数来导入播放列表。我花了几个小时来做这件事,我很绝望,因为我无法应付
我展示了我所尝试的:要保存播放器:
def SavePlaylist():
name = SearchBox.get() + "§"
if len(playlist) >1 and name != "":
newrow = [name, playlist]
with open(os.path.join(sys.path[0], "AntiTubePlaylists.txt"), "a") as f_object:
writer_object = writer(f_object)
writer_object.writerow(newrow)
f_object.close()
要导入播放列表:
with open(os.path.join(sys.path[0], "AntiTubePlaylists.txt"), "r") as csv_file:
csv_reader = csv.reader(csv_file, quotechar='"', delimiter='§')
for row in csv_reader:
playlistt = row[1][2:][:-1]
print(playlistt[0])
playlistmenu.add_command(label=row[0], command=(lambda playlistt = playlistt: ImportPlaylist(playlist)))
它所做的是创建一个列表,其中包含了我的列表中的每一个字符。(例如,print命令只打印“[”
4条答案
按热度按时间nr7wwzry1#
虽然使用
eval
可能会起作用,但它是一个很大的安全风险!您应该只将其用于测试目的,并且只用于您确信没有不受信任的人篡改过的文件。原因是eval实际上以代码的形式运行文件中的所有内容,因此如果有人在您正在阅读的csv文件中注入了一些恶意代码,您将(不知不觉地)在加载文件时执行它!实际上,使用JSON保存对象要容易得多,特别是
json.dump()
和json.load()
(https://docs.python.org/3/library/json.html#basic-usage)应该是您想要的。另一种选择是使用
pickle
库,它是为存储Python对象而设计的,但正如页面所述,它不太安全,所以最好还是坚持使用JSON。另外一个好处是JSON是人类可读的,而pickle会输出一些垃圾:注意
json.dump
和pickle.dump
都有一个转储到字符串而不是文件的版本,即json.dumps
和pickle.dumps
,这可能很方便。lx0bsm1f2#
Eval解决了这个问题:
vojdkbi03#
你想要一个csv有2列(网址,标题)?我个人会使用Pandas:从你的字典列表创建一个 Dataframe 然后保存到csv
例如
z9zf31ra4#
要使用JSON,文件需要有正确的格式,所以我想出了下面的解决方案,注意
str(s).replace
; JSON需要用双引号引这些项。