【问题标题】:Python3 - list index out of range - extracting data from filePython3 - 列表索引超出范围 - 从文件中提取数据
【发布时间】:2020-01-06 10:31:45
【问题描述】:

我想从文件中提取数据并使用“for-loop”更改条目的值。

f = open(r"C:\Users\Measurement\LOGGNSS.txt", "r")
x=0
content = [[],[]]
for line in f:
    actualline = line.strip()
    content.append(actualline.split(","))
    x+=1
f.close

print(x)
for z in range(x):
    print(z)
    print(content[z][1])

IndexError: 列表索引超出范围

使用实数值而不是变量“z”可以正常工作。但我需要更改整个二维数组中的所有第一个条目。 为什么它不起作用?

【问题讨论】:

  • f.close 不会关闭文件顺便说一句。
  • 内容最初包含空列表。这些将立即因超出范围的索引而失败。
  • “使用实数值而不是变量 'z' 可以正常工作”你是什么意思?值 0 和 1 肯定会失败,因为您的列表列表以空列表开头。
  • 我有一个超过 80k 行的文件。所以使用 5 或 70000 而不是 z 我可以访问。
  • 5 或 70,000 将避免列表开头的两个空数组

标签: python for-loop multidimensional-array


【解决方案1】:

您的代码有几个问题。 首先,使用with statement 正确打开/关闭文件。 然后,您不需要使用x 之类的变量来跟踪行数,只需使用enumerate() 代替!

以下是我将如何重构您的代码以使其更苗条且更具可读性。

input_file = r"C:\Users\Measurement\LOGGNSS.txt"
content = []

with open(input_file, 'r') as f:
    for line in f:
        clean_line = line.strip().split(",")
        content.append(clean_line)

for z, data in enumerate(content):
    print(z,'\n',data)

请注意,您可以在一个循环中读取文件时打印内容。

with open(input_file, 'r') as f:
    for z, line in enumerate(f):
        clean_line = line.strip().split(",")
        content.append(clean_line)
        print(z,'\n', clean_line)

最后,如果您正在处理一个简单明了的 csv 文件,请使用标准库中的 csv module

import csv

with open(input_file, 'r') as f:
    content = csv.reader(f, delimiter=',')

【讨论】:

    【解决方案2】:

    你用两个空数组初始化你的内容,所以这两个都找不到第一个索引([1]),只需用一个空数组初始化它

    content = []
    

    【讨论】:

    • @Mat - 我建议查找该行中的内容,我猜是空行。
    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多