Python奇怪的“字符串索引必须是整数”错误

时间:2020-07-22 03:41:15

标签: python

问题已解决!是newfilename [0,3]而不是newfilename [0:3]

我知道之前曾有人问过这个问题,我一直在四处寻找与该错误消息相关的所有答案和问题类型,但找不到任何遇到相同类型问题的人。

我正在播种整个方法,以防万一。所以这是我的问题;

当我尝试获取时,它是使用newfilename [int,int]的“ newfilename”的子字符串,并且编译器一直认为我在那里没有整数,至少从我在检查。

我正在使用此代码做什么:我正在剪切文件名(例如“ foo.txt”)的末尾,以获取保存为newfilename的“ foo”。然后,我将数字(转换为字符串)添加到其末尾以获取“ foo 1”,然后再添加回“ .txt”以获取最终结果“ foo 1.txt”。当我尝试取出子字符串并删除文件名的最后四个字符以获取“ foo”时,就会出现问题。在那之后,我再次检查文件夹中是否还有这样的文件,如果是,我进行另一组剪切和粘贴以将1添加到先前的文件中。老实说,我还没有测试过while循环是否可以正常工作,我只是认为它应该在技术上可以正常工作,但是由于此错误,我的代码还没有达到那么远。

我的错误:

File "C:/Users/Reaper/IdeaProjects/Curch Rec Managment/Setup.py", line 243, in moveFiles
    print(newfilename[0, 3])
TypeError: string indices must be integers

请注意,此错误来自于我尝试对其进行硬编码以查看其是否有效

这是当前错误,其中的硬代码已被注释掉:

    newfilename = newfilename[0, int(newfilename.__len__() - 4)] + " 1.m4a"
TypeError: string indices must be integers

我尝试过的事情:我尝试对数字进行硬编码的方法是直接输入newfilename [0,7],但仍然遇到相同的错误。我试过在一个单独的python文件中执行此操作,它似乎可以正常工作。另外,真正让我困惑的是,它可以在程序的另一部分正常工作,如下所示:

 nyear = str(input("Enter new Year: "))
 if nyear[0:2] != "20" or nyear.__len__() > 4:
     print("Sorry incorrect year. Please try again")

所以我已经花了一段时间了,试图弄清楚世界上正在发生什么并且无法到达那里。决定我会睡一会儿,但会提出问题以防万一。如果有人指出什么地方可能出问题了,那就太好了!还是告诉我编译器只是愚蠢的,好吧,我想那也可以。

我的功能代码

def moveFiles(pathList, source, filenameList):
    # moves files to new location
    # counter keeps track of file name position in list
    cnter = 0
    for x in pathList:
        filename = filenameList[cnter]
        #print(x + "\\" + filename)

        # new filename
        if filename.find("PR") == 0:
            newfilename = filename[3:filename.__len__()]
        else:
            newfilename = filename[2:filename.__len__()]

        # checking if file exists and adding numbers to the end if it does
        if os.path.isfile(x + "\\" + newfilename):
            print("File Name exists!!")
            # adding a 1 to the end
            print(newfilename)
            # PROBLEM ON NEXT TWO LINES, also prob. on any line with the following calls
            print(newfilename[0, 3])
            newfilename = newfilename[0, int(newfilename.__len__() - 4)] + " 1.m4a"

            print("Adding 1:", newfilename)
            # once again check if the file exists and adding 1 to the last number
            while os.path.isfile(x + "\\" + newfilename):
                # me testing if maybe i just can't have math operations withing the substring call
                print("File exists again!!")
                num = newfilename.__len__() - 6
                num2 = newfilename.__len__() - 4
                num3 = int(newfilename[num, num2])
                num = newfilename.__len__() - 5
                newfilename = newfilename[0, num] + str(num3 + 1)
                print("Adding 1:", newfilename)

        # moving file and deleting prefix
        if not os.path.isdir(x):
            os.makedirs(x)

        os.rename(source + "\\" + filename, x + "\\" + newfilename)
        cnter += 1

1 个答案:

答案 0 :(得分:0)

我认为您需要这个:

print(newfilename[0:3])