簡體   English   中英

在Python中將列表寫入CSV文件

[英]Writing List to a csv file in Python

我目前正在使用Python v2.10。 我在將數據寫入csv文件時遇到問題。 想知道是否有人可以告訴我我做錯了什么。 我收到以下錯誤: "TypeError: list indices must be integers, not tuple" -不確定如何更正此錯誤。 另外,我還想寫一個csv文件,數據必須是字符串格式?

理想情況下,我希望每一行都是這樣:Name,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()

您的代碼包含一些問題,在它是csv對象之前將坐標重新分配為列表,您使用的是csv.reader而不是csv.writer ,我建議您在此處閱讀文檔: https : csv.writer /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()
import csv

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

OK, 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>

Koffee 的回答對我來說似乎是完全足夠的,因此我建議您接受並可能贊成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM