Skip to content Skip to sidebar Skip to footer

Python CSV Read-> Write; Remove And Replace PLUS: End Of Line Is JSON Format

I am having problems getting my Python script to do what I want. It does not appear to be modifying my file. I want to: Read in a *.csv file that has the following format Propert

Solution 1:

Maybe something like this (assuming that each line has the same keys, and in the same order):

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)

which produces

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

I think most of that code should make sense, except maybe the zip(*split) trick: that basically transposes a sequence, i.e.

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

so that the elements are now grouped together by their index (the first ones are all together, the second, etc.)


Post a Comment for "Python CSV Read-> Write; Remove And Replace PLUS: End Of Line Is JSON Format"