diff --git a/codecarbon/output_methods/file.py b/codecarbon/output_methods/file.py index 76297a863..211585d14 100644 --- a/codecarbon/output_methods/file.py +++ b/codecarbon/output_methods/file.py @@ -88,6 +88,11 @@ def out(self, total: EmissionsData, _): """ file_exists: bool = os.path.isfile(self.save_file_path) + if file_exists and os.path.getsize(self.save_file_path) == 0: + logger.warning( + f"File {self.save_file_path} exists but is empty. Treating as new file." + ) + file_exists = False if file_exists and not self.has_valid_headers(total): logger.warning("The CSV format has changed, backing up old emission file.") backup(self.save_file_path) diff --git a/tests/output_methods/test_file.py b/tests/output_methods/test_file.py index 87ef9163e..e36132680 100644 --- a/tests/output_methods/test_file.py +++ b/tests/output_methods/test_file.py @@ -173,6 +173,30 @@ def test_file_output_out_update_file_exists_one_matchingrows(self): # file_output = FileOutput("test.csv", self.temp_dir, on_csv_write="append") # file_output.out(self.emissions_data, None) + def test_file_output_out_append_empty_file_exists(self): + file_output = FileOutput("test.csv", self.temp_dir, on_csv_write="append") + # Create an empty file + with open(file_output.save_file_path, "w") as _: + pass + + # This should not raise an error + file_output.out(self.emissions_data, None) + + df = pd.read_csv(os.path.join(self.temp_dir, "test.csv")) + self.assertEqual(len(df), 1) + + def test_file_output_out_update_empty_file_exists(self): + file_output = FileOutput("test.csv", self.temp_dir, on_csv_write="update") + # Create an empty file + with open(file_output.save_file_path, "w") as _: + pass + + # This should not raise an error + file_output.out(self.emissions_data, None) + + df = pd.read_csv(os.path.join(self.temp_dir, "test.csv")) + self.assertEqual(len(df), 1) + def test_file_output_task_out(self): task_emissions_data = [ TaskEmissionsData(