鱼C论坛

 找回密码
 立即注册
查看: 1665|回复: 2

[已解决]35课后作业

[复制链接]
发表于 2020-3-29 10:44:41 | 显示全部楼层 |阅读模式
5鱼币
要求:提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容,当用户点击“OK”按钮的时候,比较当前文件是否修改过,如果修改过,则提示“覆盖保存”、”放弃保存”或“另存为…”并实现相应的功能。

我的问题:
1、我已经创立了f1的副本f2,可我什么都不做,还是‘检测到文本发生变化’
2、没有打开文本,修改文本的对话框
3、其他问题

           
import easygui as g
f1 = open(g.fileopenbox(default="c:*.txt"),'w+')
f2 = open('temp.txt','w+')
f3 = open('另存为.txt','w+')
while True:
    info = f1.read()
    if len(info) == 0:
        break
    else:
        f2.write(info)
answer1 = '覆盖保存'
answer2 = '放弃保存'
answer3 = '另存为'
while f1.read != f2.read:
    if answer1 == g.buttonbox(msg = '检测到文本发生变化',choices = ['覆盖保存','放弃保存','另存为']):
        g.filesavebox(default = f1)
    if answer2 == g.buttonbox(msg = '检测到文本发生变化',choices = ['覆盖保存','放弃保存','另存为']):
        g.filesavebox(default = f2)
    if answer3 == g.buttonbox(msg = '检测到文本发生变化',choices = ['覆盖保存','放弃保存','另存为']):
        while True:
            info = f1.read()
            if len(info) == 0:
                break
            else:
                f3.write(info)
        g.filesavebox(default = f3)
f1.close()
f2.close()
f3.close()
最佳答案
2020-3-29 10:44:42
本帖最后由 txxcat 于 2020-3-29 11:08 编辑

1、我已经创立了f1的副本f2,可我什么都不做,还是‘检测到文本发生变化’
你的f2虽然做了写入动作,但是没有关闭,就是close(),没有保存,实际上是个空文件,所以f2.read()后肯定不会等于f1.read()。

2、没有打开文本,修改文本的对话框
要使用textbox(),语法如下:
textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)

3、其他问题
什么问题?

最佳答案

查看完整内容

1、我已经创立了f1的副本f2,可我什么都不做,还是‘检测到文本发生变化’ 你的f2虽然做了写入动作,但是没有关闭,就是close(),没有保存,实际上是个空文件,所以f2.read()后肯定不会等于f1.read()。 2、没有打开文本,修改文本的对话框 要使用textbox(),语法如下: textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True) 3、其他问题 什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-29 10:44:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 txxcat 于 2020-3-29 11:08 编辑

1、我已经创立了f1的副本f2,可我什么都不做,还是‘检测到文本发生变化’
你的f2虽然做了写入动作,但是没有关闭,就是close(),没有保存,实际上是个空文件,所以f2.read()后肯定不会等于f1.read()。

2、没有打开文本,修改文本的对话框
要使用textbox(),语法如下:
textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)

3、其他问题
什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-29 11:14:08 | 显示全部楼层
看你的问题很有可能是没注意到textbox方法会在文本末尾默认追加一个换行符'\n'所以你比较的时候需要给另一个对象加上换行符之后进行比较。
其次,并没有打开三个文件的必要,这样显得代码的思路非常复杂,需要保存文本的话可以把文本存放到字符串中进行处理。

这是我当时学的时候的,有可能有些遗漏,不过只是作为参考的话应该还是能跑的。
import easygui as g
import os

filedir = g.fileopenbox()
with open(filedir) as f:

    string = ''
    for each_line in f:
        string += each_line   # 文本全部放入到字符串中

    basename = os.path.basename(filedir)
    msg1 = '文件【%s】内容如下:' %basename
    title1 = '显示文件内容'
    text = g.textbox(msg1,title1,text = string)

    if string + '\n' != text:    # textbox默认结尾多一个换行符
        msg2 = '检测到文件内容发生改变,请选择以下操作:'
        title2 = '警告'
        choices = ('覆盖保存','放弃保存','另存为')
        choice = g.buttonbox(msg2,title2,choices)

    #内容变化
        if choice == '覆盖保存':
            with open(filedir,'w') as f2:
                f2.write(text)

        if choice == '另存为':
            savedir = g.filesavebox()
            if os.path.splitext(save_dir)[1] != '.txt':
                save_dir += '.txt'
            with open(savedir,'w') as f2:
                f2.write(text)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 04:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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