Я боролся с этим несколько дней и безуспешно исследовал. Я пытаюсь написать функцию, которая
- перебирает каталог
- открывает файл excel, который соответствует строковому шаблону
- открывает файл и ищет специфику c рабочий лист ('импортер')
- копирует данные в CSV и продолжает добавлять в CSV, пока все файлы не будут завершены.
- Я бы хотел, чтобы функция игнорировала файлы, которые не включите вкладку «импортер» или просто перейдите к следующему файлу в FOR l oop, не выполняя остальную часть («СОЗДАНИЕ ФАЙЛА CSV»).
- Создание файла должно происходить только в том случае, если оба имени файла соответствуют шаблону и рабочий лист «импортера» существует. Я чувствую, что близок, но мне нужно немного направления.
def append_all(input_directory):
for file in os.listdir(input_directory):
# Qualify if file exist
if bool(re.search(pattern, file)) == True:
# Join directory path name to file name
in_fpath = os.path.join(input_directory, file)
out_fpath = os.path.join(input_directory, 'history.csv')
wrkbk = xlrd.open_workbook(in_fpath)
if wrkbk.sheet_names() == 'importer':
wrksht = wrkbk.sheet_by_name('importer')
# Handling excel refresh date value to be used to populate csv file
refresh_date_float = wrksht.cell_value(1, 4)
refresh_date_value = xlrd.xldate_as_datetime(refresh_date_float, wrkbk.datemode).strftime(
'%Y/%m/%d %H:%M')
# else:
# continue
# CSV FILE CREATION
# Qualify if file exist. Default returns TRUE
if os.path.isfile(out_fpath) == False:
# os.mkdir(output_directory)
# file will be created if it does not exist
with open(out_fpath, 'w', newline='') as csvfile:
wr = csv.writer(csvfile)
# start row index 3 to skip unecessary data
for rownum in range(3, wrksht.nrows):
# wr.writerow(wrksht.row_values(rownum) + list(refresh_date_value))
wr.writerow(list(wrksht.row_values(rownum)) + [refresh_date_value])
# Start append data
else:
with open(out_fpath, 'a', newline='') as csvfile:
wr = csv.writer(csvfile)
# start row index 4 to skip header row
for rownum in range(4, wrksht.nrows):
# wr.writerow(wrksht.row_values(rownum) + list(refresh_date_value))
wr.writerow(list(wrksht.row_values(rownum)) + [refresh_date_value])
csvfile.close()
print('process complete')