python - 使用 python 将列添加到 .csv
问题描述
我有一个看起来像这样的原始 .csv,有 25834 行:
我想在这个 .csv 中添加一些列,但我不能同时这样做,所以我要做的是打开以前的 .csv 并创建一个新的,如下所示:
with open('results.csv', 'r') as read_object, \
open('results_output.csv', 'w', newline='') as write_object:
csv_reader = reader(read_object)
csv_writer = writer(write_object)
line_count = 0
for row in csv_reader:
if line_count == 0:
row.append('relative_stenosis')
csv_writer.writerow(row)
line_count += 1
line_count += 1
for image_name in os.listdir(directory_segmentation):
if str(row[1]) == image_name:
image = cv2.imread(directory_segmentation + "/" + image_name)
row.append(
rel_st_calc.RelativeStenosisCalculation().calculate_relative_stenosis(image, 'green'))
csv_writer.writerow(row)
该代码添加了一个列,其中图像的名称与我在目录中的 150 个图像之一的名称匹配。问题是在新的 .csv 中,所有其他行都被删除了,当我想保留原来的 25834 行时,我得到了 150 行的 .csv。我想为那些没有出现的设置一个空值,因为我稍后会需要它们。我怎样才能做到这一点?现在我有这个:
非常感谢!
编辑:这些是我正在使用的输入:
from csv import writer
from csv import reader
解决方案
没有匹配的行会消失,因为您从未将它们添加到新的 csv 中。要解决此问题,您将必须跟踪是否找到图像,然后在第三列中写入具有空值的行(如果没有找到)。例如:
third_col_value = ""
for image_name in os.listdir(directory_segmentation):
if str(row[1]) == image_name:
image = cv2.imread(directory_segmentation + "/" + image_name)
third_col_value = rel_st_calc.RelativeStenosisCalculation().calculate_relative_stenosis(image, 'green')
break # Already found the file, no need to finish the loop
row.append(third_col_value)
csv_writer.writerow(row)
不过,尝试直接访问该图像可能是一个更好的主意,因为您已经知道图像的名称(在 中row[1]
)。这样,您就不会浪费时间对目录列表进行不必要的迭代来查找名为row[1]
. 为此,请for image_name in os.listdir(...):
用以下代码替换循环:
third_col_value = ""
image_name = row[1]
image_path = os.path.join(directory_segmentation, image_name)
if os.path.exists(image_path):
third_col_value = rel_st_calc.RelativeStenosisCalculation().calculate_relative_stenosis(image, 'green')
row.append(third_col_value)
csv_writer.writerow(row)
推荐阅读
- html - 如何使用 XPATH 在跨度类下创建所有文本的连接字符串
- java - 升级 Android Firebase 库会导致崩溃
- ios - 如何将带有图像数据的 CMSampleBuffer 转换为适合通过网络连接发送的格式?
- javascript - 在 Chrome 扩展程序中未定义 parentNode
- reactjs - MobX,Store 不可用,请确保它是由某些提供商提供的
- c# - C#:使用 PDFsharp 创建 PDF 表单 (AcroForm)
- php - 在 laravel 中如何在方法中传递请求实例
- sql-server - Terada 中的 BIGINT 到 INT 转换
- javascript - 如果当前显示虚拟键盘,则提交表单按钮需要在移动设备上单击两次
- gradle - 使用 Gradle 配置 Swagger 代码生成器。提供的 Gradle 脚本如何工作?