<p>您的<code>while</code>条件从未被检查过,不,因为<code>for</code>循环从不允许Python检查。<code>for</code>循环从生成器函数中获取元素既不在这里也不在那里。你知道吗</p>
<p>如果条件仍然成立,则需要检查<code>for</code>循环中的<strong>:</p>
<pre><code>for file in partGenerator(fList):
name = os.path.basename(file)
storage += os.path.getsize(file)
if storage >= 2500000:
# wait for input before continuing, then reset the storage amount
input("Please close some files to continue, then press ENTER")
storage = 0
</code></pre>
<p>Python不会检查<code>while</code>条件,直到<code>while ...:</code>语句下的块中的完整套件(一系列语句)完成运行或执行<code>continue</code>语句,因此<code>while</code>条件确实不适合这里。你知道吗</p>
<p>在上面的示例中,我使用了低技术的<code>input()</code>函数来请求运行脚本的人在之后按<code>ENTER</code>。这将取决于<code>oDoc.Documents</code>作为API实际提供了什么,以确定是否可以使用它来检测文件已关闭。你知道吗</p>
<p>如果要使用生成器函数,请让它跟踪文件大小。你甚至可以让它从CSV文件中读取这些内容。我会使用<a href="https://docs.python.org/3/library/csv.html" rel="nofollow noreferrer">^{<cd12>} module</a>来处理拆分和进程,顺便说一下:</p>
<pre><code>import csv
def parts(logfile):
with open(logfile, newline='') as f:
reader = csv.reader(f)
files = [column for row in reader for column in row if column]
fcount = len(files)
storage = 0
for i, filename in enumerate(files):
storage += os.path.getsize(file)
if storage >= 2500000:
input("Please close some files to continue, then press ENTER")
storage = 0
print(f'Auslastung: {storage} bite / 2500000 bite')
yield file
print(f'Fortschritt: {i} / {fcount} ({i / fcount:.2%}) - {name}')
</code></pre>
<p>那就用吧</p>
<pre><code>for file in parts('C:/Users/user/Desktop/log.txt'):
oDoc = oApp.Documents.Open(file)
</code></pre>
<p>请注意,打开的文件的绝对数量是操作系统限制的数量,而不是这些文件的大小。你知道吗</p>