1

Python スクリプトで自分のやりたいことを実行するのに問題があります。私のファイルを変更しているようには見えません。

したい:

  1. 次の形式の *.csv ファイルを読み取ります PropertyName::PropertyValue,…,PropertyName::PropertyValue,{ExtPropertyName::ExtPropertyValue},…,{ExtPropertyName::ExtPropertyValue}
  2. PropertyName:: を削除して、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 ファイルの最初の行 (入力) は次のとおりです。

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,

完璧な世界では、これが私のテキストファイルの外観です(出力)

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

そのため、1 つのヘッダー行と列の値

更新されたJSON 情報

各行の終わりには、JSON 形式のテキストがあります。

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

ヘッダーを使用して XYZ と XYZ に分割する必要がある

4

1 に答える 1

1

おそらく次のようなものです(各行に同じキーがあり、同じ順序であると仮定します):

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')]

要素がインデックスによってグループ化されるようになりました (最初の要素はすべてまとめられ、2 番目の要素はまとめられます)。

于 2013-03-03T20:54:29.327 に答える