我有一份国家/地区列表。对于每个国家,我都有一个地区和人口。
即[Afghanistan, 647500.0, 25500100, Albania,28748.0,2821977]
和其他50人一样。
我试图将每组信息分成单独的[],例如:
[["Afghanistan",647500.0,25500100],["Albania",28748.0,2821977]]
到目前为止我有这个脚本:
def readFile():
# I already have it so it reads the lists of countries.
try:
linestring = open(filename).readlines()
linestring = linestring.split("\r")
linestring = linestring.split("\n")
print linestring
答案 0 :(得分:2)
新答案:
现在我想我理解了OP的问题,这里是一个使用列表推导来加载CSV文件的快速演示。
>>> arrs = [ l.rstrip().split(",\t") for l in open(filename) ]
然后由于你的一些数据是整数,你可能想要从字符串中转换它们:
>>> data = [ [arr[0], int(arr[1]), int(arr[2])] for arr in arrs ]
您可能还想咨询csv module,其中包含为您执行此操作的功能。
一行演示
>>> l = "Zimbabwe,\t390580.0,\t12973808\n"
>>> l.rstrip().split(",\t")
['Zimbabwe', '390580.0', '12973808']
<击> 先前的答案
一个不同的,易于理解的解决方案是将列表拆分为大小为3的子列表,并具有列表推导。
>>> sublist_size = 3
>>> L = ["Afghanistan", 647500.0, 25500100, "Albania",28748.0,2821977]
>>> grouped = [ L[i:i+sublist_size] for i in range(0, len(L), sublist_size) ]
>>> grouped
[['Afghanistan', 647500.0, 25500100], ['Albania', 28748.0, 2821977]]
此解决方案使用range
来获取有一个国家/地区(每三个元素)的索引来拆分原始列表。
击>
答案 1 :(得分:2)
您的评论描述了制表符分隔的换行符分隔文本文件。 Python有一个module,便于从具有该格式的文件中读取和写入。您的应用程序的一个示例是:
import csv
with open(filename, 'rb') as f:
grouped = list(csv.reader(f, delimiter='\t'))
print grouped
当有一个非常好的库已经用于此目的时,没有必要进行拆分和分组。
答案 2 :(得分:1)
这是一种简单的方法:
In [5]: l = ['Afghanistan', 647500.0, 25500100, 'Albania',28748.0,2821977]
In [6]: zip(*(l[n::3] for n in range(3)))
Out[6]: [('Afghanistan', 647500.0, 25500100), ('Albania', 28748.0, 2821977)]
(它返回元组而不是列表。如果对你重要的话,很容易改变。)
答案 3 :(得分:0)
您当前的代码存在缺陷。
linestring = open(filename).readlines() # returns a list of lines
linestring = linestring.split("\r") # lists don't have a split method!
linestring = linestring.split("\n") # even if split worked, this would be a list now
您需要阅读文件。很难说出它的格式。你可能想要使用json模块。
您可能希望查看itertools documentation中的grouper
食谱。