动机
最近处理csv文件的时候,遇到了某些行的行尾出现多余的分号的情况,而我在使用这些csv文件的时候,这些分号会导致程序运行错误,所以就需要将这些多余的分号去除,csv的形式如下:
image_path | annotation |
---|---|
path/to/image1 | 2 x1 y1 x2 y2;1 x1 y1 x2 y2 |
path/to/image2 | 1 x1 y1 x2 y2; |
path/to/image3 | 2 x1 y1 x2 y2 |
… | … |
解决方案
这种情况可以使用python进行解决,具体步骤如下:
- 假设需要处理的csv文件为train.csv,首先需要使用python对其进行读取
file = open("train.csv", "r") # 只读模式读取train.csv文件
lines = [] # lines列表存储每一行的内容
for i in file:
lines.append(i) # 遍历每一行内容进行存储
file.close() # 读取完毕
- 然后使用for循环对每一行内容进行处理,若行尾有分号,则去除
new = [] # 用于存储处理后的每一行内容
for line in lines:
if line[:-1].endswith(";"): # 若该行以分号结尾
tmp = line[:-1].rstrip(";") # 去除该分号
new.append(tmp + "\n") # 结尾加上换行符并存储
else:
new.append(line) # 若不以分号结尾,则直接存储
- 假设要生成的新的csv文件为train_new.csv,则将new中的内容写入即可
file_write_object = open("train_new.csv", "w") # 写入模式
for var in new:
file_write_object.writelines(var)
file_write_object.close()
结果
image_path | annotation |
---|---|
path/to/image1 | 2 x1 y1 x2 y2;1 x1 y1 x2 y2 |
path/to/image2 | 1 x1 y1 x2 y2 |
path/to/image3 | 2 x1 y1 x2 y2 |
… | … |