提取 AnnAGNPS_TBL .txt文档中数据 ,提取为excel格式
import pandas as pddata = []
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
如何修改??????? 这个错误是因为在数据中某些行可能没有“:”这个分隔符,所以当 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:} 这个问题产生的原因是你试图访问一个不存在的列表索引。在你的代码中,当你尝试分割字符串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]