如何解决;索引器:字符串索引超出范围“;python中的错误?
我使用下面的代码从文本文件中读取数据,并在其中一些行之间添加一些行,但是在运行代码之后,在执行此操作之前,我得到一个错误,如下所述 文本文件中的数据从csv文件转换而来,并以逗号分隔如何解决;索引器:字符串索引超出范围“;python中的错误?,python,error-handling,Python,Error Handling,我使用下面的代码从文本文件中读取数据,并在其中一些行之间添加一些行,但是在运行代码之后,在执行此操作之前,我得到一个错误,如下所述 文本文件中的数据从csv文件转换而来,并以逗号分隔 import os import re import time from datetime import datetime file_list = [] file_counter = 1 for filename in os.listdir(os.getcwd()): file_list.append(f
import os
import re
import time
from datetime import datetime
file_list = []
file_counter = 1
for filename in os.listdir(os.getcwd()):
file_list.append(filename)
for filename in file_list:
if(filename=='q.py'): continue
file = open(filename,"r").read().split('\n')
file_to_write = "file" +str(file_counter) +".txt"
file_w = open(file_to_write,"w")
file_w.write(file[0])
file_w.write("\n")
number_of_lines = sum(1 for _ in file)
lis = []
for i in range(number_of_lines):
lis.append(file[i])
modified_time = []
for i in range(number_of_lines):
line = lis[i].split(' ')
if(line[0]=='name' or line[0]==''):
continue;
temp1 = ""
temp1+=line[2][0]
temp1+=line[2][1]
temp1+=line[2][2]
temp1+=line[2][3]
temp1+=line[2][4]
temp1+=line[2][5]
temp1+='0'
temp1+='0'
line[2] = temp1
try:
modified_time.append(line[0]+' '+line[1]+' '+line[2]+'
'+line[3]+' '+line[4]+' '+line[5])
except:
continue
for i in range(len(modified_time)-1):
line1 = modified_time[i].split(' ')
if(line1[0]=='name' or line1[0]==''):
continue;
line2 = modified_time[i+1].split(' ')
date1 = line1[1]
date2 = line2[1]
time1 = line1[2]
time2 = line2[2]
day1 = datetime.strptime(date1, '%Y/%m/%d').date()
day2 = datetime.strptime(date2, '%Y/%m/%d').date()
diff1 = (day2-day1).days*24*60
format = '%H:%M:%S'
startDateTime = datetime.strptime(time1, format)
endDateTime = datetime.strptime(time2, format)
diff2 = endDateTime-startDateTime
diff2 = diff2.seconds/60
diff = diff1 + int(diff2)
lis_written = line1[0] + ' ' + line1[1] + ' ' + line1[2] + ' ' +
line1[3] + ' ' + line1[4] + ' ' + line1[5] + '\n';
file_w.write(lis_written)
format = '%Y/%m/%d %H:%M:%S'
time_counter = datetime.strptime(line1[1]+' '+line1[2], format)
from datetime import timedelta
for i in range(diff-1):
time_counter = time_counter +timedelta(0,60)
time_value = str(time_counter)
time_value = time_value.split(' ')
giventime = time_value[1]
givendate = time_value[0]
temp_str = ""
temp_str+=givendate[0]
temp_str+=givendate[1]
temp_str+=givendate[2]
temp_str+=givendate[3]
temp_str+='/'
temp_str+=givendate[5]
temp_str+=givendate[6]
temp_str+='/'
temp_str+=givendate[8]
temp_str+=givendate[9]
lis_written = line1[0] + ' ' + temp_str + ' ' + giventime + ' ' +
str(-999) + ' ' + line1[4] + ' ' + line1[5] + '\n';
file_w.write(lis_written)
file_w.write(file[len(file)-1])
file_w.write("\n")
file_counter+=1
这是我在第33行得到的错误:
Traceback (most recent call last):
File "C:\Users\bxr5813\Desktop\time series\run\New folder\New folder\q.py",
line 33, in <module>
temp1+=line[2][4]
IndexError: string index out of range
你试过调试吗?我认为您应该将
if(第[0]='name'行或第[0]=''行):
更改为if(第[0]='Value'行或第[0]='':
行,您会得到索引错误
,因为代码试图复制第一个循环中'Time'的第四个索引
此外,您的代码似乎需要一些简化。例如,你可以写
file_list = []
for filename in os.listdir(os.getcwd()):
file_list.append(filename)
asfile\u list=[i for i in os.listdir(os.getcwd())]
你也可以简化
temp1 = ""
temp1+=line[2][0]
temp1+=line[2][1]
temp1+=line[2][2]
temp1+=line[2][3]
temp1+=line[2][4]
temp1+=line[2][5]
temp1+='0'
temp1+='0'
line[2] = temp1
到行[2]=行[2][:5]+'00'
line[0]+''+line[1]+'+line[2]+'+line[3]+'+line[4]+'+line[5]+'\n'
可以修改为'.join(modified_time)+'\n'
,而line
数组的最大索引似乎是3,而不是5
此外,如果不再使用文件,建议您使用file\u used.close()
,关闭打开以读取或写入的文件
我还没有对整个程序进行调试,但我认为您需要调试代码。我建议您使用Visual Studio代码程序。它非常有用。如果您想获取第3行(索引2)上的最后一个元素,它将是
temp1+=行[2][3]
引用行[x][4]意味着您希望行的第5列只有4个实际上,这没有帮助!
temp1 = ""
temp1+=line[2][0]
temp1+=line[2][1]
temp1+=line[2][2]
temp1+=line[2][3]
temp1+=line[2][4]
temp1+=line[2][5]
temp1+='0'
temp1+='0'
line[2] = temp1