【问题标题】:split a string on the basis of delimeters根据分隔符拆分字符串
【发布时间】:2019-09-19 02:29:32
【问题描述】:

我有一个 csv 文件,它由 5 列组成,其中我只需要用竖线(|)分隔符分隔的两列。以下是其中几个:

SERIAL_NO|N|1385,45,871,104|1|?
CUST_ID|N|1704,211,552,71|1|?
PROD_TYPE|A|367,286,1167,74|1|?
BRANCH_CODE|N|1892,429,254,74|1|?
BRANCH_NAME|A|682,412,774,72|1|?
DATE|N|2022,581,241,82-1863,581,137,75-1697,581,153,85|1|?

我只想要列表中的第 0 和第 2 索引数据,以便我可以根据给定的坐标将该数据提供给图像,我将在图像中进行裁剪并将这些图像保存为与第 0 相同的文件名索引数据。

为了更清楚地说明这是我想要做的,我有一个坐标在 csv 文件中的图像(如 1385,45,871,104),在根据给定坐标进行裁剪后,我想用该行的第 0 个索引数据的名称是(SERIAL_NO)。我必须对所有行都这样做,并且某些行有多个坐标,除以 - 符号。

【问题讨论】:

  • 此类问题请停止使用opencvimage-processing 标签!从您现在的四个完全相同的问题中可以清楚地看出您最终想要实现什么。然而,这里陈述的这个单一问题 - 就其本身而言 - 与 OpenCV 或图像处理无关。另外,不要忽略对your prior question(s) 的回答。
  • @HansHirse 先前问题的解决方案不起作用....
  • 然后在此处对该答案发表评论,然后继续!不要在短时间内打开几乎相同的问题,重复使用错误的标签。例如,您没有回复回答者在上一个问题中的最后一条评论。
  • 在写问题时,尤其是标题时,请忽略“我遇到麻烦了”、“我想知道如何做”之类的花言巧语,并专注于您遇到的实际问题。
  • @JamesZ@HansHirse 如何根据 (x,y,w,h) 格式的坐标裁剪图像,并使用第一列(即 SERIAL_NO,CUST_ID 和等等)名称。我基本上想将所有sn-ps保存在各自的文件夹中,并绘制csv文件中所有可用的区域坐标,并使用命名约定保存文件。字段名作为文件名

标签: python string crop


【解决方案1】:
f = open("file.csv", "r")
coordinates = []
for line in f:
    splitted = line.split("|")
    for coor in splitted[2].split("-"):
        coordinates.append((splitted[0], coor)
f.close()

这应该为您提供作为元组列表的坐标。

【讨论】:

  • 我收到错误....... f = open("page1_CA.csv", "r") 坐标 = [] for line in f: splitted = line.split("| ") for coor in splitted[2].split("-"): coordinates.append((splitted[0], coor) f.close() 文件“”,第 8 行 f .close() ^ SyntaxError: 无效语法
  • 你应该看看你的缩进:*.com/questions/6045605/…
  • 如何根据 (x,y,w,h) 格式的坐标裁剪图像并使用第一列(即 SERIAL_NO、CUST_ID 等)名称保存裁剪后的图像.我基本上想将所有sn-ps保存在各自的文件夹中,并绘制csv文件中所有可用的区域坐标,并使用命名约定保存文件。字段名作为文件名
【解决方案2】:

您可以使用csv 模块将文件拆分为管道字符:

import csv
f = open("file.csv", "r")
reader = csv.reader(f, delimiter='|')
for row in reader:
    print (row[0],":",row[2].split("-"))

输出是

SERIAL_NO : ['1385,45,871,104']
CUST_ID : ['1704,211,552,71']
PROD_TYPE : ['367,286,1167,74']
BRANCH_CODE : ['1892,429,254,74']
BRANCH_NAME : ['682,412,774,72']
DATE : ['2022,581,241,82', '1863,581,137,75', '1697,581,153,85']

【讨论】:

  • 正如您在日期行中看到的那样,我也希望它们分别具有三个不同的坐标....
  • 我不相信那是你的问题陈述。你说可能有不止一组坐标,而不是你想要用它们做什么。但我已经对这个问题进行了编辑。你不能让csv同时关注2个分隔符,所以你必须自己做第二级分割。
  • 如何根据 (x,y,w,h) 格式的坐标裁剪图像并使用第一列(即 SERIAL_NO、CUST_ID 等)名称保存裁剪后的图像.我基本上想将所有sn-ps保存在各自的文件夹中,并绘制csv文件中所有可用的区域坐标,并使用命名约定保存文件。字段名作为文件名