我有一点概念问题。为了写入文件“to_file”,这有效:
<?php
$dirs = glob('images/*', GLOB_ONLYDIR);
foreach($dirs as $val) {
echo '<div class="gallery">';
echo "<a><h3><span>»</span> ".basename($val). "</h3></a>";
echo '<div class="gallery-list">';
$files = glob($val.'/*.{jpg,png,gif}', GLOB_BRACE);
foreach($files as $file) {
echo "<div><a href='".$file."' ><img src='" . $file . "'></a></div> \r\n";
}
echo "</div>";
echo "</div>";
}
?>
......但这不是:
out_file = open(to_file, 'w')
out_file.write(indata)
理论上,不应该换掉变量(out_file)定义的变量本身会产生相同的结果吗?我很困惑为什么创建变量的额外步骤是必要的。
答案 0 :(得分:3)
正如其他人所指出的那样,您的代码实际上会打开并写入文件。然而,...
在您的第二个单行代码中,您现在没有对打开文件的引用。因此,您无法关闭它或使用它做任何其他事情。
保持文件打开是资源泄漏。如果您的程序立即关闭,Python将尝试在结束之前关闭该文件。但由于各种原因,Python可能会失败。例如,在您写入文件之后但程序结束之前,可能会删除包含该文件的可移动磁盘驱动器。这可能会使可移动驱动器上的文件无法读取 - 我已经看到了这种情况。如果你的程序没有立即关闭,你就会有这个额外的资源,它需要内存和其他不需要的资源。如果您的程序持续很长时间,那么不断增长的资源可能会减慢或停止计算机。
即使你的程序会立即关闭,这也是一个不好的习惯。您不想只编写程序,而是希望编写能够在各种情况下正常运行的代码。您可能会认为&#34;我永远不会在长期运行的程序中使用此代码。&#34;这种声明经常被证明是错误的。编码很难 - 不要让自己变得更难。避免&#34;反模式&#34;你的第二个例子。
Python中有一个更好的模式,using the with
statement。阅读该链接并使用该模式,而不是两个示例中的任何一个。
with open(to_file, 'w') as out_file:
out_file.write(indata)
这两行打开文件,将数据写入文件,然后关闭文件。如果要在文件关闭之前对文件执行更多操作,请将该代码放在with
语句下的缩进部分中。
答案 1 :(得分:0)
在Python 2.7中,您提供的两个示例都将工作并写入该文件。