Что может привести к зависанию этого кода на больших текстовых файлах? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь создать скрипт, который будет читать файл макета и анализировать большой текстовый файл.

Сценарий прочитает файл макета и проанализирует текстовый файл на основе начальной и конечной позиций файла макета. И тогда каждая проанализированная часть строки в файле будет назначена в поле 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 или подходом. Спасибо заранее за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...