我正在尝试将列表列表中的数据写入csv文件。这是我所拥有的
class Point(object):
def __init__(self, weight, height):
self.weight = weight
self.height = height
def get_BMI(self):
return (self.weight * self.height) / 42 # this is not how you calculate BMI but let's say
myList = [[Point(30, 183)],[Point(63, 153)]]
由于数据的设置方式,我将点存储在嵌套循环中。如果我想访问第一个点对象的BMI,我会键入
myList[0][0].get_BMI()
我想将每个点的BMI写入CSV(用逗号分隔)。我该怎么做?
以下是我的想法,但并不完全是直截了当的:
import csv
with open('output.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(myList)
它不会返回任何错误,但实际上也不会创建CSV文件。我还想将myList[i][j].get_BMI()
中的值写入文件。我没有权限问题,因为我使用Spyder(python IDE)作为根用户。现在我只是通过Spyder控制台运行脚本,但它应该仍然可以工作并输出CSV文件。
^{} 需要字符串或数字列表。您应该首先创建一个包含BMI值的列表,以便它们可以写入您的
csv
文件:有三个问题:
必须展平嵌套列表。要完成此操作,请使用itertools.chain.from_iterable。
必须自定义CSV的行数据。要完成此操作,请使用list comprehensions。
未创建output.csv。我怀疑正在创建output.csv,但它被放置在一个意外的位置。你可以尝试硬编码一个完整的测试路径,看看是不是这样。
下面是演示1和2的代码:
您可以使用
writerows
来实现这一点,因为它希望有一个rows
列表-每个row
都应该按照dialect
参数的格式设置为csv.writer
,在这种情况下可以忽略它,而不必担心任何反作用。因此
writerows
可以采用类似于myList
的结构。问题是你需要访问所有的点并获取它们的bmi(这可以在列表理解中完成)为了说明如何使用writerows(并在每个点上添加一个数字,以便所有行都不只有一个条目(这会令人沮丧),我添加了枚举调用。
因此,您不再需要复杂的循环或任何类似的循环。享受:
相关问题 更多 >
编程相关推荐