Python 使用csv文件从元组到整数
我在使用csv.reader时遇到了一点问题 我有两个文件: FileA对应于9个地理坐标(x(第1列)和y(第2列),没有标题。该文件将从excel保存到csv文件中Python 使用csv文件从元组到整数,python,csv,tuples,Python,Csv,Tuples,我在使用csv.reader时遇到了一点问题 我有两个文件: FileA对应于9个地理坐标(x(第1列)和y(第2列),没有标题。该文件将从excel保存到csv文件中 301506 5918202 301012 5919417 309769 5919926 299337 5924043 299602 5924730 305310 5907794 300634 5927108 303968 5922319 303684 5922062 304882 5922009 File
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
文件“C:\generatesequence\script.py”,第19行,在
FileC[sequence[i],1]=坐标[i,1]
TypeError:列表索引必须是整数,而不是元组
我想构建FileC,以便在ArcMAP中使用它
欢迎提供任何建议:)
a[b,c]
索引a
和元组(b,c)
。您需要仔细考虑在执行此操作的特定行中真正想要做什么。您正在尝试使用元组访问列表。例如,请尝试文件[sequence[i]:1]=坐标[i: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']
[2]中的:导入csv
在[3]中:spamReader=csv.reader(open('test.csv','rb'),delimiter=','quotechar='|')
在[4]中:spamReader
出[4]:
在[5]中:spamReader.next()
Out[5]:['a','b','c','d','f','g']
读卡器返回的对象是迭代器,而不是元组或列表。因此FileA应该是一个迭代器(您不能直接将其转换为列表)您访问列表的方式不正确:您不能像在R或MATLAB中那样使用逗号访问二维列表。请仔细检查一下 根据您的代码,我认为这应该可以完成您正在尝试做的事情:
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
我不明白,你能说得更清楚些吗?列表(迭代器)将给出[[a,b,c,d,f,g]]而不仅仅是元素列表谢谢你的回答,不幸的是我得到了以下错误:'TypeError:列表索引必须是整数,而不是str'请尝试上面的编辑版本。我将一行更改为
FileC[int(lineB[0])]=lineA
实际上点数更大(49而不是10),但以同样的方式使用您的脚本(我检查了两次没有错误),我得到:'[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,['301506.3',5918202.4'],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],请发布您的FileA.csv和FileB.csv的内容。根据你的帖子,我猜fileB.csv总是有一个12,至少在第1列,但我们真的需要看看它。嗨,谢谢你的帮助。请你看看我的另一个问题。基本上,“wim”编写的代码工作得很好。但我的问题是如何在csv文件中使用我的数据?也许使用文本文件的另一种方式导入数据更容易些?谢谢您的回答,但是我收到了以下错误消息:“文件C:\testing\script.py”,第51行,在文件[sequence[I]:1]=坐标[I:1]类型错误:“\U csv.reader”对象不可订阅”