Ваше условие while
никогда не проверяется, нет, потому что цикл for
никогда не позволяет проверять Python. То, что цикл for
берет элементы из функции генератора, ни здесь, ни там нет.
Вам нужно проверить внутри вашего for
цикла, если ваше условие все еще выполняется:
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
Python не проверяет условия while
до тех пор, пока полный набор (ряд операторов) в блоке с оператором while ...:
не завершит работу или не выполнит оператор continue
, поэтому условие while
действительно не выполняется Т здесь подходит.
В приведенном выше примере я использовал низкотехнологичную функцию input()
, чтобы узнать, кто запускает скрипт, чтобы потом нажать ENTER
. Это будет зависеть от того, что oDoc.Documents
на самом деле предлагает в качестве API, чтобы увидеть, можете ли вы использовать это для обнаружения того, что файлы были закрыты.
Если вы хотите использовать функцию генератора, проследите за размерами файлов. Вы даже можете прочитать его из файла CSV. Я бы использовал модуль csv
для обработки разбиения и прогресса, кстати:
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}')
тогда просто используйте
for file in parts('C:/Users/user/Desktop/log.txt'):
oDoc = oApp.Documents.Open(file)
Обратите внимание, что абсолютное количество открытых файлов - это то, что ограничивает ваша ОС, а не размер этих файлов.