一个“文本文件”打开并且保存多元化的程序细节分析

实验目标:1)提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容。

     2)当用户点击“OK”按钮的时候,比较当前文件是否被修改过,如果修改过,则提示“覆盖保存”、“放弃保存”或“另存为”并实现其功能。

import easygui as g

import os

file_path = g.fileopenbox(default="e:/pathonaaa/a/")

with open(file_path) as old_file:

#with as语句代替了try finally,自带默认close()功能#

title = os.path.basename(file_path)

msg="文件【%s】的内容如下:" % title

text = old_file.read()

#这个是当前文件打开的内容,注意若文件内有二进制内容,则红字报错#

text_after = g.textbox(msg,title,text)

#如果当前文件在输出框里有变化,那么变化的叫text_after,同时原先的old-file文件在后台关闭#

if text != text_after[:-1]:

#这个是整个程序的精华之处,用这条语句可以检查是否test发生了改变#

choice = g.buttonbox("检测到文件内容发生改变,请选择以下操作:","警告",("覆盖保存","放弃保存","另存为"))

if choice == "覆盖保存":

with open(file_path,"w") as old_file:

#以新写入的方式打开当前的文件#

old_file.write(text_after)

#覆盖写入#

if choice == "放弃保存":

pass

if choice == "另存为":

another_path = g.filesavebox(default=".txt")

#先确定了新文件的路径#

if os.path.splitext(another_path)[1] !=".txt":

#如果新的文件没有保存成txt文件的话#

another_path +=".txt"

#那就在屁股上加上.txt#

with open(another_path,"w") as new_file:

new_file.write(text_after)

============================分割线==============================

if text != text_after[:-1]:

这句话重点分析一下,os里的read()输出是一个大的字符串,那么这个大的"字符串[:-1]"就是一个仅仅少一个最后一个字符而已。

for example:

AAA="阿斯顿飞过规划局"      #这是一个字符串#

AAA[:-1]="阿斯顿飞过规划"    #少了那个“局”字#

所以可见该程序里text哪怕一个字不动也肯定不等于text_after[:-1],但是在程序中真的一个字也不动却不会触发“!=”,明明少了一个字符,为何还是“==”呢?

原因如下:easygui.textbox函数会在返回的字符串后边追加一个行结束符(“\n”),即print一下就能看见后面多了一个\n,而没有print出来的但是已经被调用的则是单纯的字符串没有\n,如果要比较字符串是否发生了改变我们需要人工的把这个\n给忽略掉。所以说“字符串[-1]”恰好就是这个\n,这里是一个重要的细节。

时间: 2024-08-04 18:23:40

一个“文本文件”打开并且保存多元化的程序细节分析的相关文章

MFC——文件打开和保存对话框(CFileDialog)

最近要做一个文件打开和保存的对话框,现将相关的代码记录如下,用以备忘! 所用控件: 2个静态标签(Static Text):用以显示功能标签: 2个文本框(Edit):用以显示打开的文件路径全名要保存的文件路径全名,设置其Read Only属性为true将文本框设置为不可编辑: 2个按钮(Button):用以浏览文件: 打开文件对话框 CFileDialog打开的对话框 代码如下: //打开文件 void COpenSaveFileDialogDlg::OnBnClickedButtonOpen

windows form窗体应用程序,建一个记事本参考代码,重点是打开,保存,另存为

//当点击打开的时候 private string files; //建一个成员变量,用来存储打开的路径 private void 打开OToolStripMenuItem_Click(object sender, EventArgs e) { //openFileDialog1.Filter = "文本文件|*txt|视频文件|*avi;*jpg"; //filter建立一个筛选器 //openFileDialog1.ShowDialog(); DialogResult isok =

发布一个软件,轻新视频录播程序,H264/AAC录制视音频,保存FLV,支持RTMP直播

已经上传到CSDN,下载地址:http://download.csdn.net/detail/avsuper/7421647,不要钱滴,嘿嘿... 本程序可以把摄像头视频和麦克风音频,录制为FLV文件. 视频压缩采用H.264编码,音频压缩采用AAC编码,支持同步进行RTMP直播(服务器端需要FMS/WOWZA/RED5等).可选择码率.分辨率.帧率.关键帧间隔等信息. 1号教室网(http://www.1jiaoshi.com)出品. 同时也做了一个可将屏幕和音频同步直播录制的软件,支持FLV

一个超简单超简单的表白程序

刷微博的时候看到一个特别有意思的程序,而且特别简单,适合用来表白和套路朋友,真的超级简单. 先看演示 原理我也不太懂,毕竟不是专业对口,直接上操作过程 1.随便新建一个文本文件 2. 打开输入代码 3. 保存.修改文件后缀为vbs 4. 双击打开就可以运行了,但双击打开会有一个exe文件执行的窗口,所以可以发给朋友,在聊天窗口打开就不会有exe文件执行的窗口了 纯属觉得好玩...... 原文地址:https://www.cnblogs.com/huasonglin/p/9215865.html

win8不通过新打开窗口进行打开和保存文件,点击即显示文本内容,点击即保存文件

前面的一篇博客讲到通过打开新窗口进行打开和保存文件,这一篇则重点介绍怎样一步到位来进行打开和保存文件(这里还以.txt文本文件为例). 我们要打开.txt文本文件,无非是想要里面的文本内容,并且把其显示到页面里罢了,那我们能不能直接点击按钮就让文件的内容自动显示到页面上............ 而不需要经过打开新窗口这一步骤呢 同样,我们点击保存按钮,能不能就直接给文件命名为自己想要的名称,而且直接保存到自己想要的位置或者文件里........ 而不经过打开新窗口定位某一个具体的文件夹下这一步骤

使用VSTO写的一个打印工牌/工作证的小程序

转行做HR近2年.最近公司要做工牌,工牌上要打印照片,姓名,工号和部门等信息.一共1000多人,如果手工排版手工打印的话,估计要死人. 于是coding的老毛病又犯了,想写个程序来打印工牌.还是拿最近比较常用vsto来做office插件程序吧.毕竟这个用起来也顺手,因为没有一个hr不会用excel. 一,工牌的大体样子 <图1> 基本元素:企业名称,照片,姓名,工号,部门,企业理念.当然程序并没有限制工卡的内容,这里只是个例子.实际使用时,你可以根据自己的需要来定义格式,定义要打印的内容. 二

12.JAVA之GUI编程打开与保存文件

功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListen

一个基于ATMEGA128的直流电机抱死程序(转)

源:一个基于ATMEGA128的直流电机抱死程序 先说一下我的硬件情况:一块ATMEGA128实验板:一个带编码器的80:1的变速电机,编码器的输出端连接到单片机的PD4和PD5引脚:一块电机驱动电路,该电路的输入为:24v电源.两路pwm信号输入,输出即为电机的正负极,要用该电路来驱动电机,则必须让两路pwm输入信号的一路占空比为0,另一路不为0,相当于让电机的一极接地,另一极接pwm,通过控制两路pwm的占空比来控制电机的转速和转动方向.pwm信号的输入端连接到单片机的PD6和PD7引脚.

C/C++关于文件的读写操作以及文件的打开和保存

通过近来的学习,总结一下关于文件的读写操作以及文件的打开和保存的方法. 一.文件的读写操作: (1)C语言对文件的读写操作 在C语言中,对文件的读写操作是用FILE结构体和常用的对文件操作的函数实现的,下面总结一下C语言中对文件操作的常用函数: fopen()   打开以文件名指定的文件 fwrite()  写文件 fread()  读文件 fseek()  移动文件的指针到新的位置通过该函数的参数设定的偏移量和初始位置 rewind()  移动文件的指针到文件流的开始位置,在通常情况下可用fs