[英]Python - Convert String into Iterable Integer List
我正在开发具有货币系统的Twitch Python IRC Bot。 用户余额存储在列表中,该列表从文本文件加载并保存到文本文件。 但是,由于文本文件的内容正在加载到一个单个字符串中,然后放置在列表中,因此我无法遍历字符串中的每个条目以为其添加点。 例如,这是我要查找的可迭代列表: [10, 21, 42, 5]
10、21、42、5 [10, 21, 42, 5]
但是,当将其保存到文本文件然后加载到列表中时,结果如下: ['10, 21, 42, 5', '0'
(添加了0条目)。 如您所见,这将仅在识别两部分的情况下遍历列表,这是引号所包围的部分。 有没有办法将从文本文件中提取的字符串转换为可以迭代的整数列表? 提前致谢!
保存到文件时,您将需要进行整洁的操作-确保以一致的格式编写文件。
当你从文件中读取,我建议使用literal_eval
从ast
包。 这会将文件中包含的所有字符串转换为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
所有其他的答案是良好做法用于存储数据,并在以后的阅读他们的建议很好,但因为你明确地询问如何“的字符串转换从文本文件提取到一个整数列表...”,我会很乐意帮助做这样的事情。
但是,虽然此答案可能适合您要求完成的事情,但这绝不是实现所需目标的最佳实践 (保存为整数列表,最好使用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
但是,等等,这将返回一个字符串! 容易,只需用分隔符", "
分割即可:
>>> z = y.split(", ")
>>> print(z)
['10', '21', '42', '5']
现在它返回一个列表,但它仍然是一个字符串列表,因此我们要做的就是将列表中的每个元素转换为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(", "))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.