В куске кода, где я просматриваю файлы, которые отформатированы иначе, чем то, что я хочу, я испытываю значительное замедление.Советы по обертке файлов быстрее
Замедление составляет порядка 2 часов для обработки 500 файлов, каждая из которых имеет приблизительно 1000 строк. Мне нужно сделать это еще много раз, поэтому любой вклад в почему он настолько медленный и как сделать его быстрее приветствуется. Вот мой код:
f массив, который у меня есть с информацией о поиске файлов.
def athwrap(athfpath, savefpath, fdirection):
ath = []
with open(athfpath, 'r') as file:
for j, line in enumerate(file):
if j == 6:
npts = int(line[5:12])
dt = float(line[17:25])
ath = np.array((fdirection, npts, dt))
elif j > 6:
uys = [float(n) for n in line.split()]
ath = np.hstack((ath, uys))
if not os.path.isdir(savefpath):
os.makedirs(savefpath, exist_ok=True)
np.savetxt(savefpath + f[i, 15] + '.txt', ath, fmt='%s')
file.close()
# Search and Wrap Files
k = 1
for i in range(0, len(f)):
athpath = path + f[i, 16] + '/' + f[i, 15] + '.ATH'
savepath = savpath + f[i, 16] + '/'
if os.path.isfile(athpath):
if k % 3 == 0:
direction = "Y"
athwrap(athpath, savepath, direction)
elif k % 2 == 0:
direction = "X"
athwrap(athpath, savepath, direction)
else:
direction = "Z"
athwrap(athpath, savepath, direction)
else:
print("Could find file " + loc + '/' + site + '/' + f[i, 16] + '/' + f[i, 15])
k += 1
Является ли ваша линия 'np.savetxt' работающей по назначению? Кажется, он многократно перезаписывает один и тот же файл в функции 'athwrap', так как' i' не изменяется во время цикла над входным файлом. Если вы намереваетесь просто написать один раз, вы, вероятно, захотите отменить эту строку на том же уровне, что и 'for'. Если вы хотите написать каждую строку в другом файле, вы, вероятно, захотите использовать 'j' в вашем поиске в' f' (и, возможно, бит 'hstack' по-другому, я не уверен). – Blckknght
Вам не нужно (и вы не можете) закрыть дескриптор файла после оператора 'with', который его открывает; он автоматически закрывается. – chepner
Существует очень мало очевидной связи между заголовком и текстом этого вопроса - кто-то, кто действительно хочет знать, насколько значительны накладные расходы производительности, связанные с 'enumerate', здесь, вероятно, будет разочарован. Неужели вы можете найти лучший заголовок, чтобы сделать его более полезным для будущих читателей? –