import os
target_dir = "xxx.xxx.xx.xx/path/to/file/dir"
start_seq = "*** Start Sequence ***"
end_seq = "*** End Sequence ***"
def tp_parser(file):
with open(file) as in_f:
lines = in_f.readlines()
f_name = in_f.name[12:16]
for i, line in enumerate(lines):
if line.startswith(start_seq):
start_line = i
elif line.startswith(end_seq):
end_line = i
with open("{0}_Target_Map.txt".format(f_name), "w") as out_f:
for i, line in enumerate(lines):
if start_line <= i < end_line:
print(line)
# out_f.write(line)
for file in os.listdir(os.chdir(target_dir)):
tp_parser(file)
Я написал этот скрипт для просмотра каталога файлов, извлечения определенной части каждого файла и записи ее в отдельный текстовый файл. Любопытно, может ли кто-нибудь пролить свет на то, что здесь происходит...
Для этой части:
if start_line <= i < end_line:
print(line)
# out_f.write(line)
Если я запускаю скрипт с печатью (строкой), я получаю ошибку «UnboundLocalError: локальная переменная 'end_line', на которую ссылается перед назначением». Однако запуск скрипта с помощью out_f.write(line) работает как положено.
Второй немного менее раздражающей проблемой является эта часть:
for file in os.listdir(os.chdir(target_dir)):
tp_parser(file)
Я не могу объяснить себе, почему я должен переключаться в рабочий каталог (т.е. os.chdir(target_dir)) для фактического перебора файлов. Я знаю, что os.listdir() сам по себе возвращает список имен файлов, но чем это отличается, если вы передаете аргумент os.chdir() в os.listdir().
Заранее спасибо.