创建以列表作为值的列表

2024-09-29 02:22:41 发布

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

我有个小问题。我试图创建一个包含两列(ID和Coordinates)的csv,其中Coordinates列实际上是4个坐标的列表。这是我的密码:

North = 42.02
South = 32.40
West = -124.453125
East = -114.0985107421875

difference = (North-South)
divided = 10

splitsize = difference/divided

coordinates = []
ID = []

count = 0

while count < 10:
    coordinates.append([West, South+(splitsize*(count+1)), East, South+(splitsize*(count))])
    ID.append(count+1)
    count += 1

现在我想把两个列表放在一个列表中,所以当我导出它时,我有一个带有两列的CSV。第一个是ID,第二个是坐标。你知道吗

1,[-124.453125, 33.362, -114.0985107421875, 32.4]
2,[-124.453125, 34.324, -114.0985107421875, 33.362]

我一直这样做,我把所有的东西都放在一行,ID和坐标都放在一个单元格里。你知道吗

编辑 只是想弄清楚我在找什么: end result

EDIT2:解决方案 这就是我从Writing Python lists to columns in csv开始所做的

with open('test.csv', 'wb') as f:
   writer = csv.writer(f)
   rows = zip(ID, coordinates)
   for row in rows:
       writer.writerow(row)

Tags: csvid列表countwriterwestsoutheast
3条回答
North = 42.02
South = 32.40
West = -124.453125
East = -114.0985107421875

difference = (North-South)
divided = 10

splitsize = difference/divided

my_list=[]
count = 1

while count < 10:
    coordinates = []
    coordinates.extend([West, South+(splitsize*(count+1)), East, South+(splitsize*(count))])
    ID=count
    my_list.append([ID,coordinates])
    count += 1

Now I want to put both lists into one so when I export it I have a CSV with two columns. IDs in the first and coordinates in the second.

1,[-124.453125, 33.362, -114.0985107421875, 32.4] 2,[-124.453125, 34.324, -114.0985107421875, 33.362]

方括号不是csv语法的一部分,因此将作为

"1","[-124.453125", "33.362", "-114.0985107421875", "32.4]"

如果您控制这个csv的使用者,最简单的解决方案是只导出五个值并让使用者处理这些列。 如果需要层次结构,JSON可能是更好的选择。你知道吗

如果您的消费者希望列表作为第二列,而无法处理JSON(???)然后你会想出口

1,"[-124.453125, 33.362, -114.0985107421875, 32.4] 2,[-124.453125,
34.324, -114.0985107421875, 33.362]"

然后希望消费者做一个eval或者类似的事情,把它变成一个列表。请注意,这是一个非常糟糕的想法,因为eval以用户的权限执行任意代码,所以任何简单的实现(以及最聪明的实现)都是很好的攻击向量。你知道吗

我不确定这是否适合您的情况,但是csv在默认情况下会返回类似的内容,因为它是一个逗号分隔的文件。尝试在Excel中打开文档并执行以下操作:

1)选择数据列

2)在“数据”下的“数据工具”中,选择“文本到列”

3)在打开的框中,选择“取消计量”单选按钮,然后单击“下一步”

4)选中“逗号”框并点击finish。你知道吗

如果您的数据现在在两列中,那么您看到的只是因为它是一个csv文件。你知道吗

相关问题 更多 >