在 Python 中将列表写入 csv 文件
Writing List to a csv file in Python
我目前正在使用 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()
您的代码包含一些问题,您将坐标重新分配为一个列表,之前它是一个 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()
import csv
def main():
my_coords = open('Geo_Coords.csv', 'a')
coords = csv.reader(my_coords)
好的,coords
是一个csv.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!在 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(...)
方法需要一个字符串,而您正在尝试,afaict,一次写一个字符串列表...
my_coords.close()
print my_coords
这将打印类似
的内容
<closed file 'Geo_Coords.csv', mode 'a' at 0x7efc8946a540>
by Koffee 对我来说似乎完全足够了,所以我建议你接受它并可能对它投赞成票。
我目前正在使用 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()
您的代码包含一些问题,您将坐标重新分配为一个列表,之前它是一个 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()
import csv
def main():
my_coords = open('Geo_Coords.csv', 'a')
coords = csv.reader(my_coords)
好的,coords
是一个csv.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!在 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(...)
方法需要一个字符串,而您正在尝试,afaict,一次写一个字符串列表...
my_coords.close()
print my_coords
这将打印类似
的内容<closed file 'Geo_Coords.csv', mode 'a' at 0x7efc8946a540>