将List写入Python中的csv文件

时间:2016-05-07 08:56:16

标签: python csv python-2.x

我目前正在使用Python v2.10。我在将数据写入csv文件时遇到问题。想知道是否有人可以告诉我我做错了什么。我收到以下错误:"TypeError: list indices must be integers, not tuple" - 不确定如何更正此错误。另外,我想写一个csv文件,数据必须是字符串格式吗?

理想情况下,我希望每一行都像: 名称,X1,Y1,X2,Y2,X3,Y3

这是我的代码:

import csv

def main():
    my_coords = open('Geo_Coords.csv', 'a')
    coords = csv.reader(my_coords)

    how_many = raw_input("How many Geometries do you wish to enter? ")
    counter = 0
    coords = []

    while counter < how_many:
        geometry = raw_input("Geometry Name  ")
        first_coordE = raw_input("1st Co-ord (Easting) ")
        first_coordN = raw_input("1st Co-ord (Northing) ")
        sec_coordE = raw_input("2nd Co-ord (Easting) ")
        sec_coordN = raw_input("2nd Co-ord (Northing) ")
        third_coordE = raw_input("3rd Co-ord (Easting) ")
        third_coordN = raw_input("3rd Co-ord (Northing) ")
        counter = counter + 1

        my_coords.write(coords[[geometry],[first_coordE,first_coordN], [sec_coordE,sec_coordN], [third_coordE,third_coordN]] )

    my_coords.close()
    print my_coords

main()

2 个答案:

答案 0 :(得分:2)

您的代码包含一些问题,您将coords重新分配为列表,之前它是csv对象,您使用csv.reader代替csv.writer,我建议您阅读文档那里:https://docs.python.org/2/library/csv.html

也许这可以帮助你,我保留你使用的结构,我只是修改了一点。

import csv

def main():
    with open('Geo_Coords.csv', 'a') as my_coords:
        coords = csv.writer(my_coords)

        how_many = int(raw_input("How many Geometries do you wish to enter? "))
        # TODO: Check user input
        rows = []

        for _ in range(how_many):
            geometry = raw_input("Geometry Name  ")
            first_coordE = raw_input("1st Co-ord (Easting) ")
            first_coordN = raw_input("1st Co-ord (Northing) ")
            sec_coordE = raw_input("2nd Co-ord (Easting) ")
            sec_coordN = raw_input("2nd Co-ord (Northing) ")
            third_coordE = raw_input("3rd Co-ord (Easting) ")
            third_coordN = raw_input("3rd Co-ord (Northing) ")

            rows.append([geometry, first_coordE,
                         first_coordN, sec_coordE,
                         sec_coordN, third_coordE,
                         third_coordN])

        coords.writerows(rows)


if __name__ == "__main__":
    main()

答案 1 :(得分:2)

import csv

def main():
    my_coords = open('Geo_Coords.csv', 'a')
    coords = csv.reader(my_coords)

好的,coordscsv.reader()对象的名称

    how_many = raw_input("How many Geometries do you wish to enter? ")

how many是字符串的名称,例如"15"

    counter = 0
    coords = []

这里你做了一件奇怪的事情,coords现在是一个空列表的名称,csv.reader()不再有一个引用它的名字......

    while counter < how_many:

上面的陈述也很奇怪......你正在用字符串比较一个int!在Python 2中,逻辑表达式string < integer总是True

        geometry = raw_input("Geometry Name  ")
        first_coordE = raw_input("1st Co-ord (Easting) ")
        first_coordN = raw_input("1st Co-ord (Northing) ")
        sec_coordE = raw_input("2nd Co-ord (Easting) ")
        sec_coordN = raw_input("2nd Co-ord (Northing) ")
        third_coordE = raw_input("3rd Co-ord (Easting) ")
        third_coordN = raw_input("3rd Co-ord (Northing) ")
        counter = counter + 1

到目前为止,非常好 - 但请注意,您尚未修改coords的值,因此当您使用名称coords时,您只是引用一个空列表

        my_coords.write(coords[[geometry],[first_coordE,first_coordN], [sec_coordE,sec_coordN], [third_coordE,third_coordN]] )

在这里,您通过寻址来引用空列表的内容;此外,寻址的语法是错误的,它必须是整数或切片对象 - 此外,.write(...)方法需要一个字符串,你正在尝试写一个一次列出的字符串......

    my_coords.close()
    print my_coords

这将打印类似

的内容
<closed file 'Geo_Coords.csv', mode 'a' at 0x7efc8946a540>
The answer Koffee似乎对我来说已经足够了,所以我建议您接受它并可能对它进行投票。