У меня есть 20 000 файлов в одной папке, ежедневно я хочу запустить некоторые критерии выбора, например if 'EXTRA' not in file:
и if file.endswith(prev_date + '.csv') and file.startswith('IC'):
, где prev_date = str('20190624')
.Где prev_date
может быть изменено.
Моя проблема в том, что некоторые заголовки столбцов отличаются.Все содержат Index, Date
.Это должны быть первые 2 столбца, затем обычно после этого мы видим `TICKER, UNITS.Однако это может измениться, в приведенном ниже коде вы можете увидеть 3 исключения, которые я кодировал, но потом я смотрю, и есть еще 20 разных имен файлов - некоторые одинаковые, но некоторые разные.
Как я могу изменитьприведенный ниже код, так что он проходит через каждую строку, берет первую строку каждого столбца, затем либо сопоставляет его в конкатенации, и помещает его в этот столбец.Или, если в настоящее время нет в списке столбцов, он добавляет его в конец, а затем индексирует его в соответствии с этим?
import os
prev_date = str('20190624')
csv_header = 'Index,Date,Ticker,Units'
csv_header_alt = 'Index,Date,Ticker,Units,CCY,PRICE,NOTIONAL'
csv_header_alt_op = 'Index,Date,Ticker,CURRENT_WEIGHT'
csv_out = 'R:/Sam/simulator/consolidated_positions' + prev_date + '.csv'
csv_dir = """R:/Sam/simulator/"""
dir_tree = csv_dir
for dirpath, dirnames, filenames in os.walk(dir_tree):
pass
csv_list = []
for dirpath, dirnames, filenames in os.walk(csv_dir):
for file in filenames:
if 'EXTRA' not in file:
if file.endswith(prev_date + '.csv') and file.startswith('IC'):
csv_list.append(os.path.join(dirpath, file))
csv_merge = open(csv_out, 'w')
csv_merge.write(csv_header)
csv_merge.write('\n')
for file in csv_list:
csv_in = open(file)
for line in csv_in:
if line.startswith(csv_header) or line.startswith(csv_header_alt) or line.startswith(csv_header_alt_op):
continue
csv_merge.write(line)
csv_in.close()
csv_merge.close()
print('\n Verify consolidated CSV file : ' + csv_out)
Кроме того, извинения, я новичок в Python, но ANY Как вы думаете, я мог бы улучшить свой код для оптимальности, пожалуйста, укажите.