尝试将数据写入新的 .txt 文件时出现错误索引越界

Error Index out of Bound when trying to write data to new .txt file

提问人:John 提问时间:7/5/2022 最后编辑:DharmanJohn 更新时间:6/12/2023 访问量:95

问:

我正在尝试将数据的特定部分从 .txt 文件写入不同的 .txt 文件以供以后使用。

代码如下。

file = open(path, newline='')
reader = csv.reader(file)

header = next(reader)
data = [row for row in reader]

#read only cartesian points to new text file
f = open("Cartesian Points.txt", "w+")
#create a range from the first cartesian point 75054 to the last 1048576
for i in range(data[75054],data[1048576],1):
    f.write(data[i])
f.close()

我的想法是完全解析原始文件,然后为笛卡尔点创建一个范围,并将其写入不同的 .txt 文件以供以后使用。

但是,在写入数据时,我收到错误

    for i in range(data[75054],data[1048576],1):
IndexError: list index out of range

我很困惑,因为我知道数据范围从单元格 75054 到 1048576,它应该简单地将该数据写入新的.txt文件。我不明白为什么数据会继续超过指定范围。

python csv 数据操作 TXT 笛卡尔坐标

评论

0赞 Matthias 7/5/2022
你试过打印吗?你真的得到一个比1048576更大的价值吗?len(data)
0赞 Codist 7/5/2022
我建议在进入循环之前print(len(data))。您可能会发现输出非常有趣
0赞 nonDucor 7/5/2022
你确定你不想要吗?range(75054, 1048576,1)
1赞 Peter Wood 7/5/2022
差一错误?en.wikipedia.org/wiki/Off-by-one_error
1赞 nonDucor 7/5/2022
如果要在输出中写入从 75054 到 1048576 的行,则该行应该在您的范围内(因为这些是 的值,这是一个索引)。执行此操作后,您将获得要写入文件中的行的值。if.write(data[i])

答:

0赞 NicoCaldo 7/5/2022 #1

该代码实际上将位置 75054 的内容作为函数的整数。for i in range(data[75054],data[1048576],1)datarange()

从您的问题来看,您似乎想在 75054 <-> 1048576范围内循环。这可以通过以下方式实现for i in range(75054,1048576,1)

使用代码

for i in range(75054,1048576):
    f.write(data[i])

75054 循环到 1048576,并将 at 位置的内容(这是循环内的整数)写入文件(对象)fdata[i]i

在上面的示例中,结尾处的 in 已被删除,因为它被 Python 本身设置为默认值1range()1

一些关于 .您可能还想在 Python 中检查列表range()