如何将文件中的字符串转换回Python中的列表?

2024-10-02 20:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个缺少它的游戏编写一个锦标赛创建者,仅供个人使用。这是一个很好的学校锻炼。。。然而,我在完成程序时偶然发现了一个问题。你知道吗

因此,在确定了锦标赛的参与者之后,我会问用户(我自己,最多是我的堂兄,如果他过来的话)是否要保存当前的参与者列表。如果是,则包含参与者的列表将写入文件:

fileWrite = open('Previous Participants', 'w')
fileWrite.write(str(participants2))
fileWrite.close()

但是,这会将列表转换为字符串,因此如果我想在下次运行程序时读取它。。。我有一根绳子。不是一个名单,我需要为比赛的创造者本身的名单(随机战斗等)。你知道吗

所以。。。如何将此字符串作为列表返回?问题是,我可以使用split,我想,但是我相信参与者的名字加空格会是个问题。你知道吗

当前文件包含上次的字符串:

['Cell', 'Lord Slug', 'Time Patroller', 'Gotenks', 'Omega Shenron', 'Nail', 'Time Breaker Bardock', 'Piccolo', 'Frieza', 'Mr. Satan', 'Beerus', 'Nappa', 'Raspberry', 'Goten', 'Vegito', 'Goku']

像“鼻涕虫勋爵”这样的参与者如果我这样做了会引起问题:

ownCharacters = input('Do you wish to use the same participants as last time? ')
if ownCharacters == 'yes' or ownCharacters == 'Yes':
    try:
        fileRead = open('Previous Participants', 'r')
        participants2 = fileRead.read()
        participants2.split
    except FileNotFoundError:
        participants2 = participants2

不会吧? 顺便说一句,当程序到达这一点时,参与者2已经用随机名称填充,因此如果文件不存在,它应该继续使用随机名称。你知道吗


Tags: 文件字符串程序列表timeopen参与者split
3条回答

不要把列表写成字符串。有很多方法可以做到这一点。最常见的方法是将每个用户写入文件的不同行,或者使用csv(或其他类型的分隔符)。你知道吗

import csv

with open('file_name.csv', newline='') as fh:
    writer = csv.writer(fh)
    writer.writerow(participants2)

先通过join写入列表: file.write(','.join(list))

阅读并使用split获取列表:

data = file.read() #read data list = data.split(',')#split data

对于多个列表,可以使用不同级别的分隔

一个更好的方法是将名称写入文件,每行一个:

fileWrite.write('\n'.join(participants2))

然后可以通过readlines检索名称列表:

participants2 = fileRead.readlines()  # elements will will need to be stripped

但是,将数据序列化为文件的正确方法是使用经过测试的库,如^{}^{}

import json 
# import pickle

with open('file.json', 'w') as f:
    json.dump(participants, f)
    # pickle.dump(participants, f)

然后您可以通过以下方式检索列表:

with open('file.json', 'r') as f:
    participants = json.load(f)
    # participants = pickle.load(f)

相关问题 更多 >