#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. Не могли бы вы это объяснить? Каким будет диск?