Python CSV read-> write; удалить и заменить PLUS: конец строки – формат JSON

У меня возникают проблемы с тем, чтобы мой скрипт Python выполнял то, что я хочу. Он не изменяет мой файл.

Я хочу:

  1. Читайте в файле * .csv, который имеет следующий формат: PropertyName :: PropertyValue, …, PropertyName :: PropertyValue, {ExtPropertyName :: ExtPropertyValue}, …, {ExtPropertyName :: ExtPropertyValue}
  2. Я хочу удалить PropertyName :: и оставить behid только столбец PropertyValue
  3. Я хочу добавить строку заголовка

Я пытался выполнить замену значений :: значения запятой, но, похоже, это не помогает:

fin = csv.reader(open('infile', 'rb'), delimiter=',') fout = open('outfile', 'w') for row in fin: fout.write(','.join(','.join(item.split()) for item in row) + '::') fout.close() 

Любые советы, будь то моя первая проблема с шагами или разрешение большей картинки, всегда приветствуются. Благодарю.

ОБНОВЛЕНИЕ / РЕДАКТИРОВАНИЕ попросил человек, достаточно хороший, чтобы просмотреть для меня!

Вот первая строка файла * .csv (INPUT)

 InnerDiameterOrWidth::0.1,InnerHeight::0.1,Length2dCenterToCenter::44.6743867864386,Length3dCenterToCenter::44.6768028159989,Length2dToInsideEdge::44.2678260053526,Length3dToInsideEdge::44.2717800813466,Length2dToOutsideEdge::44.6743867864386,Length3dToOutsideEdge::44.6768028159989,MinimumCover::0,MaximumCover::0,StartConnection::ImmxGisUtilityNetworkCommon.Connection, 

В идеальном мире вот что я хотел бы, чтобы мой текстовый файл выглядел как (OUTPUT)

 InnerDiameterOrWidth, InnerHeight, Length2dCenterToCenter,,,,,,,,,,, 0.1,0.1,44.6743867864386 

поэтому одна строка заголовка и значения в столбце

ОБНОВЛЕНО JSON Info

Конец каждой строки имеет форматированный текст JSON:

 {StartPoint::7858.35924983374[%2C]1703.69341358077[%2C]-3.075},{EndPoint::7822.85045874375[%2C]1730.80294308742[%2C]-3.53962362760298} 

Который мне нужно разделить на XYZ и XYZ с заголовками

Может быть, что-то вроде этого (предполагая, что каждая строка имеет одинаковые ключи и в том же порядке):

 import csv with open("diam.csv", "rb") as fin, open("diam_out.csv", "wb") as fout: reader = csv.reader(fin) writer = csv.writer(fout) for i, line in enumerate(reader): split = [item.split("::") for item in line if item.strip()] if not split: # blank line continue keys, vals = zip(*split) if i == 0: # first line: write header writer.writerow(keys) writer.writerow(vals) 

который производит

 localhost-2:coding $ cat diam_out.csv InnerDiameterOrWidth,InnerHeight,Length2dCenterToCenter,Length3dCenterToCenter,Length2dToInsideEdge,Length3dToInsideEdge,Length2dToOutsideEdge,Length3dToOutsideEdge,MinimumCover,MaximumCover,StartConnection 0.1,0.1,44.6743867864386,44.6768028159989,44.2678260053526,44.2717800813466,44.6743867864386,44.6768028159989,0,0,ImmxGisUtilityNetworkCommon.Connection 

Я думаю, что большая часть этого кода должна иметь смысл, за исключением, возможно, трюка zip(*split) : это в основном переносит последовательность, т.е.

 >>> s = [['a','1'],['b','2']] >>> zip(*s) [('a', 'b'), ('1', '2')] 

так что элементы теперь сгруппированы по их индексу (первые из них все вместе, второе и т. д.),