Если мы используем Java 7 и выше, а также знаем, какой контент будет добавлен (добавлен) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.
public static void main(String[] args) {
Path FILE_PATH = Paths.get("C:/temp", "temp.txt");
String text = "\n Welcome to Java 8";
//Writing to the file temp.txt
try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
Есть несколько замечаний:
StandardCharsets
. try-with-resource
, в которой ресурсы автоматически закрываются после попытки. Хотя OP не спросил, но на всякий случай мы хотим искать строки с определенным ключевым словом, например confidential
мы можем использовать потоковые API в Java:
//Reading from the file the first line which contains word "confidential"
try {
Stream lines = Files.lines(FILE_PATH);
Optional containsJava = lines.filter(l->l.contains("confidential")).findFirst();
if(containsJava.isPresent()){
System.out.println(containsJava.get());
}
} catch (IOException e) {
e.printStackTrace();
}
Вы можете исправить свой код, изменив:
empty_df.append(new)
на:
empty_df = empty_df.append(new)
, но я не думаю, что вам следует это делать. Вам было бы намного проще скопировать весь фрейм данных с помощью
empty_df = data.copy()
Для изменения столбца предположим, что имя столбца, в котором хранится имя изображения, равно imageName
, а значение переменной ran.
new_df = data.loc[data['imageName'] == ran ] #if ran is a variable
Я считаю, что все, что вы делаете, можно упростить, отфильтровав новый DF на основе ran
empty_df = data[data.iloc[:,0] == ran]
empty_df.head()
Output:
0 1 2 3 4 5
0 image1.png 1023 554 1126 646 nucleus
1 image1.png 1023 554 116 646 nucleus
2 image1.png 103 544 1126 6 nucleus
3 image1.png 10 354 1556 56 nucleus
4 image1.png 13 55 1216 46 nucleus
.