Python 如何从没有引号的文件加载嵌套列表?

Python 如何从没有引号的文件加载嵌套列表?,python,file,python-3.x,save,Python,File,Python 3.x,Save,我应该为软件批发商创建一个“库存控制”系统,用于分配模块。我已经创建了这个程序,但是我在永久保存东西时遇到了困难。该程序由嵌套列表组成,如下所示: [["Ms Office", "CD", 7, "Microsoft"], ["Acrobat Reader", "DVD", 12, "Adobe"], ["Norton Antivirus", "DVD", 24, "Symantec"]] 我可以用以下格式将它们保存到文本文档中 ['Ms Office', 'CD', 7, 'Microsof

我应该为软件批发商创建一个“库存控制”系统,用于分配模块。我已经创建了这个程序,但是我在永久保存东西时遇到了困难。该程序由嵌套列表组成,如下所示:

[["Ms Office", "CD", 7, "Microsoft"], ["Acrobat Reader", "DVD", 12, "Adobe"], ["Norton Antivirus", "DVD", 24, "Symantec"]]
我可以用以下格式将它们保存到文本文档中

['Ms Office', 'CD', 7, 'Microsoft']
['Acrobat Reader', 'DVD', 12, 'Adobe']
['Norton Antivirus', 'DVD', 24, 'Symantec']
但是,当我尝试以相同格式将其作为列表加载回来时,我会用引号将每个条目分隔开来,如下所示:

["['Ms Office', 'CD', 7, 'Microsoft']", "['Acrobat Reader', 'DVD', 12, 'Adobe']", "['Norton Antivirus', 'DVD', 24, 'Symantec']"]
我现在只需要去掉列表中每个项目周围的双引号。 我用于加载此文件的代码:

filename = open('Appexstock.txt', 'r')
contents = filename.read()
thelist = [name for name in contents.split('\n') if name.split('"') if name]
filename.close()

我已经在网上搜索了几个小时,尝试了所有的方法,但是我仍然找不到一个让它工作的方法。我看到很多人建议使用CSV模块,但我不知道如何将其应用到我的代码中。

使用
ast.literal\u eval

>>> from ast import literal_eval
with open('Appexstock.txt') as f:
    lis = [literal_eval(line) for line in f]
...     
>>> lis
[['Ms Office', 'CD', 7, 'Microsoft'], ['Acrobat Reader', 'DVD', 12, 'Adobe'], ['Norton Antivirus', 'DVD', 24, 'Symantec']]
要存储python对象,最好使用以下模块:


我需要将从文件加载的列表保存到一个列表变量中,以便在以后的函数中使用。像列表=['Ms Office',CD',7',Microsoft'],['Acrobat Reader',DVD',12',Adobe'],['Norton Antivirus',DVD',24',Symantec']]当我尝试用pickle代码执行此操作时,我得到一个错误消息:“列表=pickle.load(f)TypeError:'str'不支持缓冲区接口“我不知道我是否做得对。我是python和编码的初学者altogether@user2802349我已经在第一个代码中这样做了,在第二个代码中只需这样做:
lis=pickle.load(data,f)
@user2802349您的代码中的
f
是什么?(
f
应该是一个文件对象)对我来说很好。好的。我不知道怎么了。保存列表的My函数:def savelists():data=thelist with open('My_data','w')为f:pickle.dump(data,f)My code to load data:import pickle with open('My_data')为f:thelist=pickle.load(data,f)print(thelist)我应该将'data'作为全局变量吗?@user2802349不要将代码粘贴到注释中,它是不可读的。使用
>>> import pickle
>>> data = [["Ms Office", "CD", 7, "Microsoft"], ["Acrobat Reader", "DVD", 12, "Adobe"], ["Norton Antivirus", "DVD", 24, "Symantec"]]
with open('my_data', 'w') as f:
    pickle.dump(data, f)
...     
with open('my_data') as f:
    print pickle.load(f)
...     
[['Ms Office', 'CD', 7, 'Microsoft'], ['Acrobat Reader', 'DVD', 12, 'Adobe'], ['Norton Antivirus', 'DVD', 24, 'Symantec']]