鱼C论坛

 找回密码
 立即注册
查看: 2092|回复: 2

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

[复制链接]
发表于 2023-6-17 13:48:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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(':')[0]
                if title_i not in title:
                    title.append(title_i)
                #将划分后的内容存储为字典格式
                if title_i not in neirong.keys():
                    neirong[title_i] = i.split(':')[1]
            info.append(neirong)
        else:
            break
#创建一个新的DataFrame存储转化后的数据
data1 = pd.DataFrame(columns = title)
for i in range(len(info)):
    #使用pandas将字典存储成dataframe形式
    add_data = pd.Series(info[i])
    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[title_i] = i.split(':')[1]
IndexError: list index out of range

如何修改???????
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-17 13:51:44 | 显示全部楼层
这个错误是因为在数据中某些行可能没有“:”这个分隔符,所以当 code 尝试使用字符串分割时,它会无法找到“:”,并且之后的代码尝试获取第二个元素时引起了IndexError。

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

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

  1. with open("AnnAGNPS_TBL.txt", encoding="utf-8") as f:
  2.     while True:
  3.         line = f.readline()
  4.         neirong = {}
  5.         if line:
  6.             data.append(line)
  7.             
  8.             if ":" in line:  # 添加if语句以检查“:”
  9.                 for i in line.split(","):
  10.                     title_i = i.split(":")[0]
  11.                     if title_i not in title:
  12.                         title.append(title_i)
  13.                     if title_i not in neirong.keys():
  14.                         neirong[title_i] = i.split(":")[1]
  15.                 info.append(neirong)
  16.         else:
  17.             break
复制代码

将上述代码与余下部分结合,并重新运行程序。最终导出Excel文件的代码仍然是:


  1. data1.to_excel(r"data.xlsx")
复制代码


求最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

  1. import pandas as pd
  2. data = []
  3. title = []
  4. info = []

  5. with open (r'AnnAGNPS_TBL.txt',encoding='UTF-8') as f:#读取text文件
  6.     while True:
  7.         line=f.readline() #按行读取
  8.         neirong = {}
  9.         if line:
  10.             data.append(line)
  11.             for i in line.split(','):#按照逗号分隔
  12.                 split_i = i.split(':')
  13.                 if len(split_i) > 1:
  14.                     title_i = split_i[0]
  15.                     if title_i not in title:
  16.                         title.append(title_i)
  17.                     #将划分后的内容存储为字典格式
  18.                     if title_i not in neirong.keys():
  19.                         neirong[title_i] = split_i[1]
  20.             info.append(neirong)
  21.         else:
  22.             break
  23. #创建一个新的DataFrame存储转化后的数据
  24. data1 = pd.DataFrame(columns = title)
  25. for i in range(len(info)):
  26.     #使用pandas将字典存储成dataframe形式
  27.     add_data = pd.Series(info[i])
  28.     data1 = data1.append(add_data, ignore_index=True)
  29. data1.to_excel(r'data.xlsx')#导出保存成为excel格式
复制代码


这个修复假设文本文件中的每一行都是一个带有冒号分隔的键值对,如果这不是你的文件格式,你可能需要修改代码以匹配你的实际数据格式。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 08:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表