Преобразование короткого кода Python в C для ускорения его работы

#python #c #python-2.7

#python #c #python-2.7

Вопрос:

Я написал немного кода на Python для нарезки текстовых файлов. Но теперь текстовые файлы очень большие, что делает вычисления невероятно медленными. Я хотел бы преобразовать код в C и, надеюсь, выполнить вычисления немного быстрее. Не могли бы вы помочь мне с этим? Это мой код на Python

 import numpy as np
from scipy import 

T = 20 # length of the output files
# Opening a file with paths to the files that need to be sliced
with open('path.txt', 'r') as paths_list:
    for file_path in paths_list:
        with open(file_path.strip(), 'r') as file:
            data = np.loadtxt(file_path.strip())
            t = data[:,0] # the first column: time
            x = data[:,1] # the second column: photon count

            # Using the name of the files as input 
            # to find the time at which the files need to be sliced
            start = file_path.strip() 
            start = start[0:-4]
            start = float(start)

            # slicing the files at the start time
            indstart_data = where(t>start)[0][0]

            # slicing at the end time 
            # which is 20 seconds after the start time
            indeind_data = where(t<start T)[-1][-1]

            newdata=data[indstart_data:indeind_data,:]

            # using the start time to name the output files
            start = str(start)
            np.savetxt(start, newdata)
  

Что он делает, так это берет файл с путями к файлам, которые я хочу вырезать. В этих файлах есть столбец со временем и столбец с количеством фотонов. Имена файлов указаны в честь времени начала, с которого должны начинаться выходные файлы.

Файлы нарезаются, начиная с момента запуска и заканчивая через 20 секунд (T = 20). Этот фрагмент сохраняется в выходных файлах, которые также называются с использованием времени начала.

Любая помощь приветствуется! Я более или менее разобрался, как нарезать файлы на C. Это в основном первая часть этого кода, которую я не могу понять, как преобразовать, так как перейти от файла с путями к фактическим входным файлам и использовать имя файлов в качестве входных данных.

Также, если у вас, ребята, есть предложения, как заставить его работать немного быстрее, я был бы очень признателен! У меня есть пара сотен входных файлов, большинство из которых составляют несколько ГБ.

Прямо сейчас у меня есть этот очень неполный код на C:

 fp=fopen("test.txt", "w");

for (int i = 0; i < unknown_numberoflines; i  )
{
    file = fopen(pathies, "r");

    if (feof(file))
        break;

    /* scan a file */
    fscanf(file, "%Lf %Lf", amp;(lines[i][0]), amp;(lines[i][1]));

    /* print contents of file */
    printf("%Lf %Lf n", lines[i][0], lines[i][1]);
    printf("%i", i);

    /* put certain lines in a new text file */
    if ((lines[i][0]) > 20 amp;amp; (lines[i][0] < 40))
    {
        fprintf(fp, "%Lf %Lf n", lines[i][0], lines[i][1]);
    }

    fclose;   
}

fclose(file);
return 0;
  

Комментарии:

1. «из scipy import » вы пробовали запускать свой код?

2. Я бы поспорил, что узким местом будет диск, и в этом случае вы не сильно выиграете от преобразования в C.

3. Не могли бы вы это объяснить? Каким будет диск?