【发布时间】:2014-01-06 22:53:07
【问题描述】:
我有一个有趣的问题正在尝试解决。我有一个大型程序,并且在该程序的一部分中,我正在制作一个 .xml 文件并写入它(只使用字符串而不使用 lxml 或任何东西)。我把那个特定的代码放到它自己的程序中进行测试并且遇到了一个问题。代码是
import os
directory = 'FileDirectory'
name = 'Test File.xml'
if not os.path.exists('K:\\JOBS\\' + directory + '\\XML Files\\'):
os.makedirs('K:\\JOBS\\' + directory + '\\XML Files\\')
xmlJob = open('K:\\JOBS\\' + directory + '\\XML Files\\' + name, 'w')
try:
xmlJob.write('Test write')
except:
print "Unexpected error:", sys.exc_info()[0]
raise
xmlJob.close
代码运行,没有给我任何错误,except 没有触发,但是当文件被创建时,里面没有任何内容。此外,如果不先关闭 Python,我也无法删除文件,因此 .close 似乎也没有发生。但是,如果我在 .write 和 .close 之后放置打印语句,它们都会触发,所以程序应该会命中所有行。上面的文字是整个程序,所以没有什么可以弄乱它的。
现在,当我改为使用时,一切正常。所以代码
import os
directory = 'FileDirectory'
name = 'Test File.xml'
with open('K:\\JOBS\\' + directory + '\\XML Files\\' + name, 'w') as xmlJob:
xmlJob.write('Test write')
运行良好。所以显然我可以使用 with 而不是 open 和 .close,但此时我想弄清楚为什么第一个选项失败了。我在其他程序中使用了几乎完全相同的代码来写入日志文件等,然后它就可以工作了。有人有什么想法吗?
【问题讨论】:
-
xmlJob.close 没有 () ???
-
您应该养成使用
os.path.join()组合路径名的习惯。它知道您的操作系统需要正斜杠还是反斜杠,并且永远不会忘记双反斜杠。
标签: python file python-2.7