王大可2000 发表于 2023-6-17 13:48:13

提取 AnnAGNPS_TBL .txt文档中数据 ,提取为excel格式

import pandas as pd
data = []
title = []
info = []

with open (r'AnnAGNPS_TBL.txt',encoding='UTF-8') as f:#读取text文件
    while True:
      line=f.readline() #按行读取
      neirong = {}
      if line:
            data.append(line)
            for i in line.split(','):#按照逗号分隔
                title_i = i.split(':')
                if title_i not in title:
                  title.append(title_i)
                #将划分后的内容存储为字典格式
                if title_i not in neirong.keys():
                  neirong = i.split(':')
            info.append(neirong)
      else:
            break
#创建一个新的DataFrame存储转化后的数据
data1 = pd.DataFrame(columns = title)
for i in range(len(info)):
    #使用pandas将字典存储成dataframe形式
    add_data = pd.Series(info)
    data1 = data1.append(add_data, ignore_index=True)
data1.to_excel(r'data.xlsx')#导出保存成为excel格式
报color=Red]错
File "F:\code\1).py", line 18, in <module>
    neirong = i.split(':')
IndexError: list index out of range

如何修改???????

sfqxx 发表于 2023-6-17 13:51:44

这个错误是因为在数据中某些行可能没有“:”这个分隔符,所以当 code 尝试使用字符串分割时,它会无法找到“:”,并且之后的代码尝试获取第二个元素时引起了IndexError。

为了避免出现此错误,我们可以首先基于当前行检查是否存在“:”,如果存在才继续执行剩余代码,否则直接跳到下一行。

解决方案是在该行添加一个 if 语句来检查“:”,如下所示:

with open("AnnAGNPS_TBL.txt", encoding="utf-8") as f:
    while True:
      line = f.readline()
      neirong = {}
      if line:
            data.append(line)
            
            if ":" in line:# 添加if语句以检查“:”
                for i in line.split(","):
                  title_i = i.split(":")
                  if title_i not in title:
                        title.append(title_i)
                  if title_i not in neirong.keys():
                        neirong = i.split(":")
                info.append(neirong)
      else:
            break
将上述代码与余下部分结合,并重新运行程序。最终导出Excel文件的代码仍然是:


data1.to_excel(r"data.xlsx")

求最佳答案{:10_254:}

isdkz 发表于 2023-6-17 14:15:00

这个问题产生的原因是你试图访问一个不存在的列表索引。在你的代码中,当你尝试分割字符串i(每行数据以逗号分割后的一个部分)时,你假设它总是包含 ':' 这个字符。然而,如果没有找到 ':' ,那么 split(':') 函数会返回一个只有一个元素的列表,然后你试图访问第二个元素(索引为1),就会导致 IndexError: list index out of range 。

要修复这个问题,你应该检查 split(':') 的结果长度是否大于1,只有当长度大于1时,才能安全地访问索引1的元素。

下面是你的代码的修改版本:

import pandas as pd
data = []
title = []
info = []

with open (r'AnnAGNPS_TBL.txt',encoding='UTF-8') as f:#读取text文件
    while True:
      line=f.readline() #按行读取
      neirong = {}
      if line:
            data.append(line)
            for i in line.split(','):#按照逗号分隔
                split_i = i.split(':')
                if len(split_i) > 1:
                  title_i = split_i
                  if title_i not in title:
                        title.append(title_i)
                  #将划分后的内容存储为字典格式
                  if title_i not in neirong.keys():
                        neirong = split_i
            info.append(neirong)
      else:
            break
#创建一个新的DataFrame存储转化后的数据
data1 = pd.DataFrame(columns = title)
for i in range(len(info)):
    #使用pandas将字典存储成dataframe形式
    add_data = pd.Series(info)
    data1 = data1.append(add_data, ignore_index=True)
data1.to_excel(r'data.xlsx')#导出保存成为excel格式


这个修复假设文本文件中的每一行都是一个带有冒号分隔的键值对,如果这不是你的文件格式,你可能需要修改代码以匹配你的实际数据格式。
页: [1]
查看完整版本: 提取 AnnAGNPS_TBL .txt文档中数据 ,提取为excel格式