我正在阅读Zed Shaw的Python书.我目前正致力于开放和阅读文件章节.我想知道为什么我们需要做截断,当我们已经在'w'模式下打开文件?
print "Opening the file..."
target = open(filename, 'w')
print "Truncating the file. Goodbye!"
target.truncate()
Run Code Online (Sandbox Code Playgroud)
Len*_*bro 34
因此Zed Shaw在已被截断的文件上调用truncate().好的,这是毫无意义的.他为什么这样做?谁知道!?问他!
也许他这样做表明该方法存在?可能是,但这将是非常愚蠢的,因为我作为一名程序员在15年内从未需要截断文件,所以它在新手书中没有位置.
也许他这样做是因为他认为他必须截断文件,而他根本不知道这是毫无意义的?
也许他故意混淆新手?这符合他的一般作案手法,这似乎是故意无缘无故地惹恼人们.
更新:他这样做的原因现在很清楚.在后面的版本中,他将这个问题列为本章中的"常见问题",并告诉您去阅读文档.因此有:
如果这是一个好的教学风格你可以辩论,我不知道.
"帮助我不明白Zed Shaws书"的数量已经减少,所以我不能说它比任何其他书都差,这可能意味着它比许多人好.:-)
小智 18
如果您在提出问题之前阅读问题,他会为您解答:
额外的信用: "如果你觉得你不理解这一点,请回过头来使用评论技巧让它在你的脑海中消失.每行上面的一个简单的英文评论将帮助你理解,或者至少让你知道你是什么需要研究更多.
编写一个类似于上一个练习的脚本,该练习使用
read和argv读取您刚刚创建的文件.这个文件中的重复次数太多了.使用字符串,格式和逃逸打印出来
line1,line2和line3只有一个target.write()命令,而不是6.找出为什么我们必须传递一个
'w'额外的参数来打开.提示:通过明确表示要编写文件,打开尝试安全.如果你用
'w'模式打开文件,那么你真的需要target.truncate()吗?去阅读Python的开放函数的文档,看看是否正确." - Zed Shaw.
他明确地希望你自己找到这些东西,这就是为什么他的额外功劳很重要.
他还明确表示他希望你注意细节.每件小事都很重要.
Bru*_*sky 11
虽然在'w'模式下打开时截断是没有用的,但在'r +'中它很有用.虽然这不是OP的问题,但我会把这个留在这里给那些像我一样在谷歌领先的人.
假设您打开(使用模式'r +',记住没有'rw'模式)5行缩进的json文件并将json.load-ed对象修改为仅3行.如果target.seek(0)在将数据写回文件之前,最终会产生2行尾随垃圾.如果你target.truncate()这样你就不会.
我知道这似乎是显而易见的,但我在这里是因为我正在修复一个在多年后保持完全相同大小的对象之后发生的错误...由于签名算法的改变而缩小了.(不显而易见的是我必须添加的单元测试以防止将来发生这种情况.我写了我最长的文档字符串,解释了为什么我用2种荒谬的人工算法来测试签名.)
希望这有助于某人.
| 归档时间: |
|
| 查看次数: |
77241 次 |
| 最近记录: |