Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文件中的字符串转换回Python中的列表?_Python_String_List_Serialization - Fatal编程技术网

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

如何将文件中的字符串转换回Python中的列表?,python,string,list,serialization,Python,String,List,Serialization,我正在为一个缺少它的游戏编写一个锦标赛创建者,仅供个人使用。这对学校来说是一个很好的锻炼。。。然而,我在完成程序时偶然发现了一个问题 因此,在确定了锦标赛的参赛者之后,我会问用户本人,最多也就是我的表弟,如果他想保存当前的参赛者名单,是否会过来。如果是,包含参与者的列表将写入文件: fileWrite = open('Previous Participants', 'w') fileWrite.write(str(participants2)) fileWrite.close() 但是,这会将

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

因此,在确定了锦标赛的参赛者之后,我会问用户本人,最多也就是我的表弟,如果他想保存当前的参赛者名单,是否会过来。如果是,包含参与者的列表将写入文件:

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']
像“slug勋爵”这样的参与者,如果我这样做,就会引起问题:

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已经用随机名称填充,因此如果文件不存在,则应继续使用随机名称。

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

import csv

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

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

import csv

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

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

fileWrite.write('\n'.join(participants2))
然后,您可以通过readlines检索名称列表:

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

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

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

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

fileWrite.write('\n'.join(participants2))
然后,您可以通过readlines检索名称列表:

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

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

with open('file.json', 'r') as f:
    participants = json.load(f)
    # participants = pickle.load(f)
首先通过加入写入列表: file.write','.joinlist

阅读并使用split返回列表:

data=file.read读取数据 列表=数据。拆分','拆分数据

对于多个列表,不同级别的分离可能会起作用

首先通过连接写入列表: file.write','.joinlist

阅读并使用split返回列表:

data=file.read读取数据 列表=数据。拆分','拆分数据


对于多个列表,不同级别的分隔可能会起作用

为什么不使用outputnames=','。JoinParticipants 2在写入文件之前,将其设置为CSV。您可以将更改为名称中不允许的任何字符。为什么不在写入文件之前使用outputnames=','。JoinParticipants 2,使其成为CSV。您可以将更改为名称中不允许的任何字符谢谢!第一个是有效的,为了简单起见,我现在选择了它。但我确实记下了你的另一个“适当”解决方案。你发布了一些很棒的信息:谢谢!第一个是有效的,为了简单起见,我现在选择了它。但我确实记下了你的另一个“适当”解决方案。你发布了一些很棒的信息:D