0

我创建了一个简单的程序,可让您输入一组数字,然后根据该人提供的数据创建一个随机生成的对列表。完成后如何保存数据(作为 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”值。

4

2 回答 2

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()

希望这可以帮助。

于 2012-10-16T02:32:36.263 回答
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语句意味着文件将在它控制的代码块完成后自动为您关闭。

于 2012-10-16T03:06:35.727 回答