在Python中将列表写入csv文件

2024-10-01 13:27:38 发布

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

我目前正在使用pythonv2.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()

Tags: csvinputrawmycounterseccoordsmany
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和string!在python2中,逻辑表达式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 answerbyKoffee对我来说似乎完全足够了,所以我建议你接受它,并可能对它投赞成票。你知道吗

您的代码包含一些问题,您将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()

相关问题 更多 >