<h2>给出代码的以下部分</h2>
<pre class="lang-py prettyprint-override"><code>with open("output.asc", "wb") as outfile:
for f in read_files:
with open(f, "rb") as infile:
if f == "BigTree.asc":
continue
else:
outfile.write(infile.read())
</code></pre>
<h2>更新部分</h2>
<ol>
<li>将<code>open("output.asc", "wb")</code>从<code>filename = sys.argv[2]</code>更改为使用<code>filename</code>
<ul>
<li>如果<code>output.asc</code>是第二个参数,它将被覆盖(<code>wb</code>)或附加到(<code>ab</code>),具体取决于指定的模式</李>
</ul></li>
<li>打开未使用的文件效率低下
<ul>
<li>在打开文件之前,使用<code>not in</code>检查<code>BigTree.asc</code></li>
<li>使用否定条件作为保护子句来扁平化代码</李>
</ul></li>
</ol>
<pre class="lang-py prettyprint-override"><code>with open(filename, "wb") as outfile:
for f in read_files:
if "BigTree.asc" not in f:
with open(f, "rb") as infile:
outfile.write(infile.read())
</code></pre>
<h2>读写模式</h2>
<pre><code>| Access Modes | Description |
| | -|
| r | Opens a file for reading only. |
| rb | Opens a file for reading only in binary format. |
| r+ | Opens a file for both reading and writing. |
| rb+ | Opens a file for both reading and writing in binary format. |
| w | Opens a file for writing only. |
| wb | Opens a file for writing only in binary format. |
| w+ | Opens a file for both writing and reading. |
| wb+ | Opens a file for both writing and reading in binary format. |
| a | Opens a file for appending. |
| ab | Opens a file for appending in binary format. |
| a+ | Opens a file for both appending and reading. |
| ab+ | Opens a file for both appending and reading in binary format. |
</code></pre>
<h2>完整程序</h2>
<ul>
<li>这一行<code>fileobj_out = open(filename, "w")</code>应该删除</li>
</ul>
<pre class="lang-py prettyprint-override"><code>import glob
import sys
import os
import time
if len(sys.argv) < 2:
print("Please supply the directory of the ascii files and an output-file as argument:")
print("python merge_file.py directory outfile")
exit()
directory = sys.argv[1]
os.chdir(directory)
currwd = os.getcwd()
filename = sys.argv[2]
starttime = time.time()
read_files = glob.glob(currwd+"\*.asc")
with open(filename, "wb") as outfile: # "wb" or "ab", if you want to append or not
for f in read_files:
if "BigTree.asc" not in f:
with open(f, "rb") as infile:
outfile.write(infile.read())
endtime = time.time()
runtime = int(endtime-starttime)
sys.stdout.write("The script took %i sec." %runtime)
</code></pre>