chong0918 发表于 2020-8-19 17:01:05

text_after[:-1]和text_after有什么区别啊,-1不就是指的是索引值的最后一个吗

请问小甲鱼第35课第三题的答案里,if text!=text_after[:-1]:#textbox的返回值会追加一个换行符。这里的text_after[:-1]和text_after有什么区别啊,-1不就是指的是索引值的最后一个吗


import easygui as g
import os

file_path=g.fileopenbox(default='*.txt')

with open(file_path) as old_file:
    title=os.path.basename(file_path)#去掉目录路径,单独返回文件名
    msg='文件【%s】的内容如下:' % title
    text=old_file.read()
    text_after=g.textbox(msg,title,text)

if text!=text_after[:-1]:#textbox的返回值会追加一个换行符
    choice=g.buttonbox('检测到文件内容发生了变化,请选择以下操作','警告',('覆盖保存','放弃保存','另存为'))
    if choice=='覆盖保存':
      with open(file_path,'w') as old_file:
            old_file.write(text_after[:-1])
    if choice=='放弃保存':
      pass
    if choice=='另存为':
      another_path=g.filesavebox(default='.txt')
      if os.path.splitext(another_path)!='.txt': #分离文件名和扩展名
            another_path+='.txt'
      with open(another_path,'w') as new_file:
            new_file.write(text_after[:-1])

zltzlt 发表于 2020-8-19 17:02:09

本帖最后由 zltzlt 于 2020-8-19 17:03 编辑

text_after[-1] 确实是最后一个字符,但切片是不包含结束位置的,也就是 text_after[:-1] 其实是从 text_after 第一个字符截取到 text_after 倒数第二个字符

但现在新版的 EasyGUI 已经不会追加换行符了,直接使用 text_after 就行,不用 text_after[:-1]

chong0918 发表于 2020-8-19 17:05:53

zltzlt 发表于 2020-8-19 17:02
-1 确实是最后一个字符,但切片是不包含结束位置的,也就是 text_after[:-1] 其实是从 text_after 第一个字 ...

好的谢谢,还有一点我不太懂,他这个text_after里边的内容除了结尾比text多一个结束符外,自己不修改的话没有不同的了吧,为什么我执行代码,两者也总是会不一样,要我覆盖保存或者另存之类的。

zltzlt 发表于 2020-8-19 17:06:17

chong0918 发表于 2020-8-19 17:05
好的谢谢,还有一点我不太懂,他这个text_after里边的内容除了结尾比text多一个结束符外,自己不修改的话 ...

现在新版的 EasyGUI 已经不会追加换行符了,直接使用 text_after 就行,不用 text_after[:-1]

chong0918 发表于 2020-8-19 17:09:07

zltzlt 发表于 2020-8-19 17:06
现在新版的 EasyGUI 已经不会追加换行符了,直接使用 text_after 就行,不用 text_after[:-1]

我刚改完后解决了,谢谢。
页: [1]
查看完整版本: text_after[:-1]和text_after有什么区别啊,-1不就是指的是索引值的最后一个吗