鱼C论坛

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

关于文件是否一致的比较问题

[复制链接]
发表于 2016-11-10 20:52:01 | 显示全部楼层 |阅读模式

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

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

x
这个问题是我在做第35讲第3问时遇到的,由于以前编的程序没有保存,也懒得去之前的回答里翻,所以从新编写了一次
一开始我是按照下面这种方法编写:
  1. from easygui import *
  2. import os

  3. file = fileopenbox()
  4. filename = os.path.basename(file)
  5. with open(file) as f,open(file) as g:
  6.     k = textbox(msg = '文件【{0}】的内容如下:'.format(filename),title='显示文件内容',text=f.read())

  7.     if k == g.read():   #直接作比较
  8.         print('yes')
  9.     else:
  10.         print('no')
复制代码

无论我有没有对k做出修改,比较结果都是不一样。
我单独打印过k和g.read()的文本对照过发现并没有不一样的地方。并且两者都是str的类型。

于是我猜测了几种情况并进行了检验:
1.g.read()可能是要逐字读取,所以不能直接和k比较,所以我先用h = g.read(),再用h和k比较,但结果失败。
2.也许不能直接比较两个多行的字符串。于是我另外编写了两个多行字符串做比较,结果并不是这个原因。
3.也许k里面每一行里藏有看不见的空格还是别的什么东西,于是我用k.split(sep='=')来切片,发现并没有空格。

而当我改用另一种方法:
  1. from easygui import *
  2. import os

  3. file = fileopenbox()
  4. filename = os.path.basename(file)
  5. with open(file) as f,open(file) as g:
  6.     k = textbox(msg = '文件【{0}】的内容如下:'.format(filename),title='显示文件内容',text=f.read())

  7.     if k.split() == g.read().split():     #我觉得可能是k里藏了一些别的什么东西,所以分成列表再来比较
  8.         print('yes')
  9.     else:
  10.         print('no')
复制代码

这一次就正常了,和期望结果一样。

希望大牛帮我看看第一种方法错在什么地方,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-11 09:24:51 | 显示全部楼层
不懂帮顶了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 13:57:04 | 显示全部楼层

啊哈,课后练习的答案有解释,是因为k的最后面会多了一个'\n'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-23 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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