鱼C论坛

 找回密码
 立即注册
查看: 1219|回复: 17

[已解决]Index out of range 求助

[复制链接]
发表于 2022-1-19 10:15:32 | 显示全部楼层 |阅读模式

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

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

x
def filename():
    global name1,name2
    name1 = input("Please enter the first file name.\n")
    name2 = input("Please enter the other file name.\n")
    
    return name1, name2

def check():
    if name1.split(".")[3] and name2.split(".")[3] == "txt":
        return True

    else:
        print("Two files are not in the same format.")
        return False

def compare():
    if check == True:
        file1 = open(name1,'r')
        file2 = open(name2,'r')

        content1 = file1.read().strip()
        print(content1)

        content2 = file2.read().strip()
        print(content2)

        if content1 == content2:
            print("The contents are the same.")
        else:
            print("The contents are not the same.")

    else:
        return

if __name__ == "__main__":
    filename()
    check()
    compare()

微信截图_20220119100939.png

我的本意是想用这个小程序来检测两个txt文件的内容是否完全相同,突然出来这个错误,我使劲想也想不通啊!能请大家帮帮忙嘛?
最佳答案
2022-1-19 10:57:19
应将第 9 行改为:
if name1.split(".")[1] == "txt" and name2.split(".")[1] == "txt":
这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1,
还有前面 name1.split(".")[1] 这条语句后面也应该加上 == "txt",因为python目前还并不支持:
x and y = 4
这类操作,必须要写成这样:
x = 4 and y = 4

懂了吗?不懂可以再问!懂了就给个好评呗!!!

打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-19 10:23:36 | 显示全部楼层
if name1.split(".")[3] and name2.split(".")[3] == "txt":

改成:
if name1.split(".")[-1] and name2.split(".")[-1] == "txt":
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-19 10:57:19 | 显示全部楼层    本楼为最佳答案   
应将第 9 行改为:
if name1.split(".")[1] == "txt" and name2.split(".")[1] == "txt":
这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1,
还有前面 name1.split(".")[1] 这条语句后面也应该加上 == "txt",因为python目前还并不支持:
x and y = 4
这类操作,必须要写成这样:
x = 4 and y = 4

懂了吗?不懂可以再问!懂了就给个好评呗!!!

打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-19 11:01:38 | 显示全部楼层

我懂了,刚才也请教了微信群里的小伙伴。
Split()是将一个字符串从一个特定字符那里分开。所以第一份字符串,在这里就等于是文件名,应该用 [0] 来代表;而第二份,也就是文件类型名,应该用 [1] 或者 [-1] 来代表!
谢谢大佬!
但是我这里改了之后又遇到一个问题了,不知大佬是否还有兴趣来帮我一下。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-19 11:03:12 | 显示全部楼层
python爱好者. 发表于 2022-1-19 10:57
应将第 9 行改为:

这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1, ...

懂了,大佬!
改完又遇到一个错误了,呜呜呜!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 11:15:07 | 显示全部楼层
谢谢好评!兄弟!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 11:16:08 | 显示全部楼层
还有什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 11:16:42 | 显示全部楼层
乐意帮助您!兄弟!
尽管说出来!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-19 13:02:54 | 显示全部楼层
python爱好者. 发表于 2022-1-19 11:16
乐意帮助您!兄弟!
尽管说出来!!!

大佬,我改进了一下我的代码,但现在出了个死循环,能否请你帮我看下代码?
def filename():
    global name1,name2
    name1 = input("Please enter the first file name.\n")
    name2 = input("Please enter the other file name.\n")
    
    return name1, name2

def check():
    if name1.split(".")[1] == "txt" and name2.split(".")[1] == "txt":
        return True

    else:
        print("Two files are not in the same format.")
        return False

def compare():
    if check() == True:

        file1 = open("E:\Code\Python" + "\" + name1,'r',encoding = 'utf-8')
        file2 = open("E:\Code\Python" + "\" + name2,'r',encoding = 'utf-8')

        content1 = file1.readlines()
        aftercontent1 = []
        for line in content1:

            while True:
                line.strip()
                line.replace('\n','')
                line.replace('\t','')

                if '\n' in line and '\t' in line:
                    continue
                else:
                    break


            aftercontent1.append(line)

        print(aftercontent1)

        content2 = file2.readlines()
        aftercontent2 = []
        for line in content2:

            while True:
                line.strip()
                line.replace('\n','')
                line.replace('\t','')

                if '\n' in line and '\t' in line:
                    continue
                else:
                    break

            aftercontent2.append(line)

        print(aftercontent2)

        if aftercontent1 == aftercontent2:
            print("The contents are the same.")
        else:
            print("The contents are not the same.")

        file1.close()
        file2.close()

    else:
        return

if __name__ == "__main__":
    filename()
    check()
    compare()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 13:04:19 | 显示全部楼层
放一下报错信息!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-1-19 13:05:37 | 显示全部楼层
python爱好者. 发表于 2022-1-19 11:16
乐意帮助您!兄弟!
尽管说出来!!!

程序运行后一直在while循环里面,我设置了跳出条件也没用。那个循环是想给字符串中的转义字符 \n \t 删除,待字符串中没有了以后,就跳出。但是我这里一直在运行,请问能帮我找下原因吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 13:14:09 | 显示全部楼层
应该把 这里面 的两个 while 循环都改成这样:
while True:
                line = line.strip()
                line = line.replace('\n','')
                line = line.replace('\t','')

                if '\n' in line and '\t' in line:
                    continue
                else:
                    break
因为你前面是直接写 line.replace('\n','') 的,
但是实际上这样是错误的,
因为字符串是无法改变的,所以所有和字符串有关的内置方法,
都是返回一个新的字符串,而并不是修改原来的字符串,
所以这里应改为 line = line.replace('\n',''),这样才能改变字符串,
不然你那样一直都改不了字符串,去不掉 \n 和 \t ,
自然循环就一直执行,结束不了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-19 13:14:45 | 显示全部楼层
缩进打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-19 13:15:23 | 显示全部楼层

是指我刚才回复的,不是你的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-19 13:20:18 | 显示全部楼层
在吗,兄弟!
帮到忙了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-1-19 14:17:09 | 显示全部楼层
python爱好者. 发表于 2022-1-19 13:14
应该把 这里面 的两个 while 循环都改成这样:

因为你前面是直接写 line.replace('\n','') 的,

哦哦哦!!!!原来是要把返回值赋给一个新的变量!程序成功运行了!谢谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-19 14:18:26 | 显示全部楼层
python爱好者. 发表于 2022-1-19 13:20
在吗,兄弟!
帮到忙了吗?

不好意思,我一直在改代码!谢谢你啦,程序终于成功运行了!感谢感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 15:03:22 | 显示全部楼层
不用谢,都是兄弟!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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