Я пытаюсь создать скрипт, который будет читать файл макета и анализировать большой текстовый файл.
Сценарий прочитает файл макета и проанализирует текстовый файл на основе начальной и конечной позиций файла макета. И тогда каждая проанализированная часть строки в файле будет назначена в поле c, которое было извлечено из файла макета.
Например, файл макета выглядит следующим образом:
FIELD_NAME START END
EE_ID 0 10
SSN 11 20
For example the line: 223342348755555555...
EE_ID => 2233423487
SSN => 555555555
Код, который я создал, прекрасно работает с текстовыми файлами меньшего размера, но как только они достигают чего-либо выше 5000 строк (я оцениваю здесь) Просто висит постоянно.
Вот мой код:
import pandas as pd
start = 0
stop = 0
new_df = pd.DataFrame([[]]) #will hold the new single row dataframe for each string we parse
final_df = pd.DataFrame([[]]) #will hold the final dataframe as we concatenate each parsed string
row = 0
hr_file_string = text_file.readline() #call readLine once to get past header of HRIS file
df_layout = pd.read_excel('layout.xlsx')
len_layout = len(df_layout)
field_list = tuple(df_layout['Field Name']) #creating a tuple of field names
z = tuple(zip(df_layout['Python Start'], df_layout['Python End'])) #creating a tuple of the layout file to speed performance
#initializing the columns for the final dataframe
for row in range(0, len(df_layout)):
column = df_layout['Field Name'][row]
final_df[column] = ''
while text_file.closed == False:
hr_file_string = text_file.readline()
# print(hr_file_string)
if hr_file_string != "" and hr_file_string[0] != 'T':
for row in range(0, len_layout):
start = int(z[row][0])
stop = int(z[row][1])
column = field_list[row]
new_df[column] = hr_file_string[start:stop]
# print(f'Current Column: {column} \tCurrent string: {hr_file_string[start:stop] }')
else:
text_file.close()
final_df = pd.concat([final_df, new_df], ignore_index=True, sort = False)
final_df.drop_duplicates(inplace = True)
Итог, есть ли лучший способ сделать это в python? Кажется, проблема может быть связана с производительностью, однако я могу выполнить ту же операцию в Alteryx с помощью файла макета, и она завершается за 5 минут. Поэтому я склонен думать, что есть проблема с кодом python или подходом. Спасибо заранее за помощь.