Python - 将字符串转换为可迭代整数列表

Python - Convert String into Iterable Integer List

我正在开发一个具有货币系统的 Twitch Python IRC 机器人。用户余额存储在一个列表中,该列表从文本文件加载并保存到文本文件中。但是,因为文本文件的内容正在加载到一个单独的字符串中,然后将其放入列表中,所以我无法遍历字符串中的每个条目以向其添加点。例如,这是我正在寻找的可迭代列表:[10, 21, 42, 5]

但是,当将其保存到文本文件然后加载到列表中时,结果如下:['10, 21, 42, 5', '0'(添加了 0 条目)。如您所见,这将遍历列表,只识别 2 个部分,也就是引号所在的部分。有没有一种方法可以将从文本文件中获取的字符串转换为可以迭代的 integers 列表?提前致谢!

当您将 保存到 文件时,您需要干净利落地保存 -- 确保以一致的格式写入。

当您阅读文件时,我建议使用 ast 包中的 literal_eval。这会将文件中包含的任何字符串转换为 Python 类型。

您是否尝试过将列表写入 yaml 文件而不是文本文件?

import yaml

myfile = path/to/my/file
mylist = [10, 21, 42, 5]

with open(myfile,'w') as handle:
    yaml.dump(mylist, handle, default_flow_style=False)

with open(myfile,'r') as handle:
    retrieved_list = yaml.load(handle)

print retrieved_list

免责声明:

所有其他答案都是非常关于存储数据和稍后读取它们的良好做法的好建议,但由于您专门询问了如何"convert the string fetched from the text file into a list of integers ...",我很乐意帮助做这样的事情。

然而,虽然这个答案可能适合您要求完成的确切事情,但它绝不是实现您想要的最佳实践(保存在列表中整数,最好用 JSON 或 YAML 完成。


解决方案

好吧,这看起来很简单。

您有一个原始列表 [10, 21, 42, 5]

你将它保存到一个文本文件中,然后将它作为一个列表来阅读,却发现它有两个部分(他们正在返回字符串+额外的是什么0?!):

['10, 21, 42, 5', '0']

看来您只需要第一部分,所以:

>>> x = ['10, 21, 42, 5', '0']
>>> y = x[0]
>>> print(y)
'10, 21, 42, 5'
>>> print(type(y))
str

但是等等,returns 一个字符串!很简单,用分隔符 ", ":

分开
>>> z = y.split(", ")
>>> print(z)
['10', '21', '42', '5']

现在它 returns 是一个列表,但它仍然是一个字符串列表,所以我们要做的就是将列表的每个元素转换为 int 类型(整数)。使用标准 for 循环很容易做到这一点,但我们可以使用 map 函数使其成为单行代码:

...
>>> print(z)
['10', '21', '42', '5']
>>> z = map(int, z)  # apply int() to every elem; equi. to [int('10'), int('21'), int('42'), int('5')]
>>> print(z)
[10, 21, 42, 5]
>>> print(map(type, z))  # print out type of every element in list
[int, int, int, int]

结论

因此,给定读入的奇怪字符串列表 x = ['10, 42, 21, 5', '0'],您可以通过以下方式获得所需的整数列表:

z = map(int, x[0].split(", "))