Index out of range 求助
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(".") and name2.split(".") == "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()
我的本意是想用这个小程序来检测两个txt文件的内容是否完全相同,突然出来这个错误,我使劲想也想不通啊!能请大家帮帮忙嘛?
if name1.split(".") and name2.split(".") == "txt":
改成:
if name1.split(".")[-1] and name2.split(".")[-1] == "txt": 应将第 9 行改为:
if name1.split(".") == "txt" and name2.split(".") == "txt":
这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1,
还有前面 name1.split(".") 这条语句后面也应该加上 == "txt",因为python目前还并不支持:
x and y = 4
这类操作,必须要写成这样:
x = 4 and y = 4
懂了吗?不懂可以再问!懂了就给个好评呗!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}
打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
{:10_254:}{:10_254:}{:10_254:}{:10_254:} z5560636 发表于 2022-1-19 10:23
改成:
我懂了,刚才也请教了微信群里的小伙伴。
Split()是将一个字符串从一个特定字符那里分开。所以第一份字符串,在这里就等于是文件名,应该用 来代表;而第二份,也就是文件类型名,应该用 或者 [-1] 来代表!
谢谢大佬!
但是我这里改了之后又遇到一个问题了,不知大佬是否还有兴趣来帮我一下。
python爱好者. 发表于 2022-1-19 10:57
应将第 9 行改为:
这里您将文件名沿 "." 一分为二,一半是文件名,一般是后缀,所以后缀的索引便是 1, ...
懂了,大佬!
改完又遇到一个错误了,呜呜呜! 谢谢好评!兄弟! 还有什么问题? 乐意帮助您!兄弟!
尽管说出来!!! 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(".") == "txt" and name2.split(".") == "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()
放一下报错信息! python爱好者. 发表于 2022-1-19 11:16
乐意帮助您!兄弟!
尽管说出来!!!
程序运行后一直在while循环里面,我设置了跳出条件也没用。那个循环是想给字符串中的转义字符 \n \t 删除,待字符串中没有了以后,就跳出。但是我这里一直在运行,请问能帮我找下原因吗? 应该把 这里面 的两个 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 ,
自然循环就一直执行,结束不了!
缩进打错了{:10_282:} python爱好者. 发表于 2022-1-19 13:14
缩进打错了
是指我刚才回复的,不是你的! 在吗,兄弟!
帮到忙了吗?
python爱好者. 发表于 2022-1-19 13:14
应该把 这里面 的两个 while 循环都改成这样:
因为你前面是直接写 line.replace('\n','') 的,
哦哦哦!!!!原来是要把返回值赋给一个新的变量!程序成功运行了!谢谢大佬! python爱好者. 发表于 2022-1-19 13:20
在吗,兄弟!
帮到忙了吗?
不好意思,我一直在改代码!谢谢你啦,程序终于成功运行了!感谢感谢! 不用谢,都是兄弟!
页:
[1]