如何将列表保存为Python文件?

时间:2012-10-16 01:46:13

标签: python save

我创建了一个简单的程序,允许您输入一组数字,然后根据人员提供的数据创建一个随机生成的对列表。 如何在完成后保存数据(作为Windows文件)? 这是我的代码:

import random as ran
import easygui as eg
nList=vList=eg.multenterbox(msg="Enter the names of the people:"
                , title="Random Pair Generator"
                , fields=('Name:', 'Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:',)
                , values=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20']
                )

index=0
x=''
y=''
pList=[]
pair=''

while not(index==len(nList)):
   x=nList[index]
   y=ran.choice(vList)
   pair=x+'; '+y
   pList.insert(index, pair)
   vList.remove(y)
   index= index+1

    eg.textbox(msg="These are the pairs generated."
                , title= "Random Pair Generator"
                , text= str(pList)
                , codebox=0
                )

我只想将pList保存为计算机上的任何位置(最好是我可以指定的地方)。 此外,此循环会产生问题。它不会引发语法或任何错误,但输出不是我想要的。

它的作用是使用nList中的每个值,然后从vList中选择一个随机值,然后将它们作为一个对象放入pList中。但是,问题在于,当我从vList中删除“y”的输出时,它也会从nList中删除它。

示例:如果nList包含5个对象:[1,2,3,4,5],则vList具有相同的对象[1,2,3,4,5]。它将从vList中为nList中的每个值选择一个随机数。 但是,一旦选择了vList中的变量,就会从列表中删除它。问题是说pList以[1; 2]其中1; 2是一个对象,下一个对象将从3开始。它将跳过2,因为2已经被用作'y'值。

2 个答案:

答案 0 :(得分:1)

我不清楚你是想将pList写成纯文本,还是作为一个列表,你可以在以后轻松重新打开......

第一种情况很简单:

f = open("path/your_filename.txt", 'w') # opening file object for writing (creates one if not found)
f.write(str(pList))                     # writing list as a string into your file
f.close()                               # closing file object

您不能将非字符串Python对象直接写入文件。如果您想保留对象类型(以便稍后加载),最简单的方法之一就是使用pickle

import pickle

f = open("/path/your_filename.pkl", 'w')
pickle.dump(f, pList)
f.close()

并将其加载为:

import pickle

f = open("/path/your_filename.pkl", 'r') # opening file object for reading
pList = pickle.load(f)
f.close()

希望这有帮助。

答案 1 :(得分:1)

如果您只想以与eg.textbox中显示的格式相同的格式保存对列表,请在程序结束时添加以下内容:

filename = eg.filesavebox(msg=None
                        , title='Save Pair List'
                        , default="pairs.txt"
                        , filetypes=['*.txt']
                        )

with open(filename, 'wt') as output:
    output.write(str(pList)+'\n')

您可以在输出文件的单独行上编写每对列表,如下所示:

with open(filename, 'wt') as output:
    for pair in pList:
        output.write(pair+'\n')

使用with语句表示文件将在其控制的代码块完成后自动关闭。