我在使用csv.reader时遇到了一些问题。
我有两个文件:
FileA对应于9个地理坐标(x(column1)和y(column2),没有标题)。该文件从excel保存到csv文件中。
301506 5918202
301012 5919417
309769 5919926
299337 5924043
299602 5924730
305310 5907794
300634 5927108
303968 5922319
303684 5922062
304882 5922009
FileB,它是0到8之间9个整数的随机序列。该文件从excel保存为csv文件。数据在第1行。
6 3 7 8 5 1 2 4 0
这是代码:
import csv
FileA = csv.reader(open(‘FileA.csv’,'rb'),delimeter=',')
coord_list = []
coord_list.extend(FileA)
coordinates = []
for data in coord_list:
coordinates.append(data[0])
print coordinates
FileB = csv.reader(open(‘FileB.csv’,'rb'),delimeter=',')
seq_list = []
seq_list.extend(FileB)
sequence = []
for data in seq_list:
sequence.append(data[0])
print sequence
FileC = []
for i range(0,8,1):
FileC[sequence[i], 1] = coordinates[i,1]
FileC[sequence[i], 2] = coordinates[i,2]
print FileC
但我明白了:
File "C:\generatesequence\script.py", line 19, in <module>
FileC[sequence[i], 1] = coordinates[i,1]
TypeError: list indices must be integers, not tuple
我想构建FileC,以便能够在ArcMAP中使用它
欢迎任何建议:)
答案 0 :(得分:2)
a[b, c]
的 a
个索引(b, c)
。你需要认真考虑你想要在你执行此操作的特定行中做什么。
答案 1 :(得分:1)
您尝试使用元组访问列表。请尝试file[sequence[i]: 1] = coordinates[i:1]
。
答案 2 :(得分:1)
例如
test.csv:
'a,b,c,d,f,g'
In [2]: import csv
In [3]: spamReader = csv.reader(open('test.csv', 'rb'), delimiter=',', quotechar='|')
In [4]: spamReader
Out[4]: <_csv.reader object at 0x1e34ec0>
In [5]: spamReader.next()
Out[5]: ['a', 'b', 'c', 'd', 'f', 'g']
csv.reader返回一个对象是一个迭代器,而不是一个元组或列表。因此FileA应该是一个迭代器(你不能直接将它转换为列表)
答案 3 :(得分:1)
您正在错误地访问列表:您无法使用逗号访问二维列表,就像在R或MATLAB中一样。请仔细查看Python lists 非常。
根据您的代码,我认为这应该可以实现您的目标:
import csv
FileA = csv.reader(open(‘C:/testing/FileA.csv’,'rb'),delimeter',')
FileB = csv.reader(open(‘C:/testing/FileB.csv’,'rb'),delimeter',')
FileC = [0] * 10
for lineA, lineB in zip(FileA, FileB):
FileC[int(lineB[0])] = lineA
print FileC