Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决;索引器:字符串索引超出范围“;python中的错误?_Python_Error Handling - Fatal编程技术网

如何解决;索引器:字符串索引超出范围“;python中的错误?

如何解决;索引器:字符串索引超出范围“;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

我使用下面的代码从文本文件中读取数据,并在其中一些行之间添加一些行,但是在运行代码之后,在执行此操作之前,我得到一个错误,如下所述

文本文件中的数据从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(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)
as
file\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