Не все ли здесь ответы с блоками try / catch содержат .close (), содержащиеся в блоке finally?
Пример для отмеченного ответа:
PrintWriter out = null;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}finally{
if(out != null){
out.close();
}
}
Кроме того, с Java 7 вы можете использовать оператор try-with-resources . Для закрытия объявленного ресурса (ов) не требуется блок finally, потому что он обрабатывается автоматически, а также менее подробен:
try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}
Вероятно, было бы намного быстрее, если бы у вас был один большой файл вместо множества маленьких. Как правило, это более эффективно. Кроме того, вы можете получить ускорение от простого сохранения массива numpy
и загрузки этого файла .npy
вместо чтения в большом текстовом файле. Я не так уверен насчет последней части, хотя. Как всегда, когда время вызывает беспокойство, я бы попробовал оба этих варианта, а затем измерил улучшение производительности.
Если по какой-то причине вы не можете просто иметь один большой текстовый файл / файл .npy
, вы также можете получить ускорение, используя, например, multiprocessing
, чтобы несколько рабочих читали файлы одновременно время. Затем вы можете просто объединить матрицы в конце.
Не ваш основной вопрос, но так как это кажется проблемой - вы можете переписать текстовые файлы, чтобы не было лишних символов новой строки, но я не думаю, что np.loadtxt
может их игнорировать. Если вы готовы использовать pandas
, то pandas.read_csv
с skip_blank_lines=True
должны справиться с этим за вас. Чтобы получить numpy.ndarray
из pandas.DataFrame
, просто сделайте dataframe.values
.