Один из вариантов заключается в том, чтобы обернуть поток System.in
в CloseShieldInputStream
, который предотвращает его закрытие. Ваш читатель затем использовал бы CloseShieldInputStream
, а не поток raw System.in
.
Вот API для класса: http://commons.apache.org/io/apidocs/ орг / апач / Обще / IO / вход / CloseShieldInputStream.html
Я внес изменения только в первую часть, так как ваша часть извлечения описания работает.
Ниже приведена реализация Python 3. Я не пробовал, поэтому, пожалуйста, дайте мне знать, если он не работает.
import os
root_folder = r'D:/MacroInvertebrates_Stacked'
content = {}
for root, dirs, files in os.walk(root_folder):
for subdir in dirs:
content[os.path.join(root, subdir)] = []
content[root] = files
list_of_dicts = []
for folder, filenames in list(content.items()):
dict_name = string(os.path.relpath(folder, root_folder)).replace('\\', '_')
dict_name = {}
for filename in filenames:
if filename.endswith('.txt'):
with open(filename) as f:
for line in f:
line = line.rstrip()
if line.startswith("Description"):
taxa = line.split()[2:3]
for taxon in taxa:
dict_name[taxon]=dict_name.get(taxon,0) +1
list_of_dicts.append(dict_name)
print(list_of_dicts)
list_of_dicts содержит имена словарей, соответствующие каждой подпапке с количеством отсчетов в ней.