Python,' open'之间的区别和'开放'

时间:2015-12-23 05:58:42

标签: python file

我没有使用with语句,但我对它的目的有些熟悉。使用以下代码,#1块按预期工作,但#2 - 在此处纠正我,应该与第一个相同 - 抛出以下异常FileExistsError: [Errno 17] File exists: 'mydir'

import os

if not(os.path.exists('mydir')):
    os.makedirs('mydir')

path = 'mydir'
filename = 'msg.txt'
filename2 = 'msg2.txt'

#1
with open(os.path.join(path, filename), 'w') as temp_file:
    temp_file.write("hello")

#2
temp_file = open(os.path.join(path, filename2), 'w')
temp_file.write("hello again")
temp_file.close()   

2 个答案:

答案 0 :(得分:2)

第1部分:openwith open之间的差异

基本上,使用with只会确保您不会忘记close()文件,从而使其更安全/防止内存问题。

第2部分:FileExistsError

这是操作系统错误,因此可能是特定于操作系统的。您的语法是正确的,假设您要覆盖(截断)前一个文件。

这可能是问题是特定于操作系统的原因,而且大多数其他用户无法复制问题。

但是,如果它导致问题,您可以尝试使用w+模式,它可能会解决问题。

github-auth

编辑:我刚刚注意到关于teams的评论流最初是路径。很高兴它得到了修复!

答案 1 :(得分:2)

此错误是由以前版本的已发布脚本引起的。它看起来像这样:

if not(os.path.exists('teams')):
    os.makedirs('mydir')

这会测试目录teams是否存在,但会尝试创建新目录mydir

建议的解决方案:为所有内容使用变量名称,不要为路径硬连线:

path = 'mydir'

if not(os.path.exists(path)):
    os.makedirs(path)

是的,#1#2基本相同。但是with语句也会在写入期间发生异常时关闭文件。