2017-12-15 15 views
-1

データリストをCSVファイルに変換しようとしています。リスト内の要素を分割して置換し、CSVに変換

リストは、csvファイルデータ

['time\ntimestamp\nrecordtime\nlat\nlong\nalt\nspeed\ncourse\nverticalAccuracy\nhorizontalAccuracy\nlocTimeStamp\naccelerationX\naccelerationY\naccelerationZ\nHeadingX\nHeadingY\nHeadingZ\nTrueHeading\nMagneticHeading\nHeadingAccuracy\nRotationX\nRotationY\nRotationZ\nmotionYaw\nmotionRoll\nmotionPitch\nmotionRotationRateX\nmotionRotationRateY\nmotionRotationRateZ\nmotionUserAccelerationX\nmotionUserAccelerationY\nmotionUserAccelerationZ\nen0\npdp_ip0\nDeviceOrientation\nState', '2014-11-19 08:57:45.696;1;1;52.33705;4.843468;8.319668;20.44;93.05875;6;5;1416383865;0.0806427;-0.4734802;-0.7419281;-16.14367;27.67606;-15.92525;53.06408\n52.48165;26;0.04704554;0.9128267;0.4871223;0.1783603;0.2536548;0.6368796;0.07435028;0.8879893;0.4615479;-0.1116289;0.1097959;0.04115437;0.0.0.0;10.167.22.1;1;0','2014-11-19 08:57:45.696;1;1;52.33705;4.843468;8.319668;20.44;93.05875;6;5;1416383865;0.0806427;-0.4734802;-0.7419281;-16.14367;27.67606;-15.92525;53.06408\n52.48165;26;0.04704554;0.9128267;0.4871223;0.1783603;0.2536548;0.6368796;0.07435028;0.8879893;0.4615479;-0.1116289;0.1097959;0.04115437;0.0.0.0;10.167.22.1;1;0'] 

と呼ばCSVと呼ばれ、このように見えるようになっている。言い換えれば

time,timestamp,recordtime,lat,long,alt,...,State 
2014-11-19 08:57:45.696, 1, 1, 52.33705, 4.843468, 8.319668,..,0 
2014-11-19 08:57:45.696, 1, 1, 52.33705, 4.843468, 8.319668,..,0 

'\n'を置き換えることがようになりました','','改行があり、これらの行に​​3210がある必要があります','です。私はどこから始めるべきかわかりません。

+0

[こちら](https://docs.python.org/2/library/string.html#string.replace)を開始してください。 –

+0

'str'オブジェクトは' split'コマンドを持っています。 '' a \ nb \ nc'.split( '\ n') 'は' ['a'、 'b'、 'c'] 'になります。 –

+0

ありがとうございました。それは私のために完全ではなかった。 – mroWsymaS

答えて

2

lをあなたのリストにしてください。

>>> header = l[0].split('\n') 
>>> rows = [s.split(';') for s in l[1:]] 

デモ:

>>> header[:3] 
['time', 'timestamp', 'recordtime'] 
>>> rows[0][:3] 
['2014-11-19 08:57:45.696', '1', '1'] 
>>> rows[1][:3] 
['2014-11-19 08:57:45.696', '1', '1'] 

それが問題の簡単な部分だと私はあなたに、ファイルのタスクI/Oを残しておきます。 csvモジュールのドキュメントを見つけるのに問題はなく、完全なコードを書くのはここにはありません。

+1

パーフェクト、それは動作します。 – mroWsymaS

1

データにはカンマが実際にはありません。リストインデックスは改行または半欄で区切られているため、個々のセルを取得するために各要素を分割するだけで済みます。そして最後に、あなたがビルトインcsvモジュールで行うことができ、標準的なCSV形式にすべてを書く:

your_list = ['time\ntimestamp\nrecordtime\nlat\nlong\nalt\nspeed\ncourse\nverticalAccuracy' 
      '\nhorizontalAccuracy\nlocTimeStamp\naccelerationX\naccelerationY' 
      '\naccelerationZ\nHeadingX\nHeadingY\nHeadingZ\nTrueHeading\nMagneticHeading' 
      '\nHeadingAccuracy\nRotationX\nRotationY\nRotationZ\nmotionYaw\nmotionRoll' 
      '\nmotionPitch\nmotionRotationRateX\nmotionRotationRateY\nmotionRotationRateZ' 
      '\nmotionUserAccelerationX\nmotionUserAccelerationY\nmotionUserAccelerationZ' 
      '\nen0\npdp_ip0\nDeviceOrientation\nState', 
      '2014-11-19 08:57:45.696;1;1;52.33705;4.843468;8.319668;20.44;93.05875;6;5;' 
      '1416383865;0.0806427;-0.4734802;-0.7419281;-16.14367;27.67606;-15.92525;' 
      '53.06408\n52.48165;26;0.04704554;0.9128267;0.4871223;0.1783603;0.2536548;' 
      '0.6368796;0.07435028;0.8879893;0.4615479;-0.1116289;0.1097959;0.04115437;' 
      '0.0.0.0;10.167.22.1;1;0', 
      '2014-11-19 08:57:45.696;1;1;52.33705;4.843468;8.319668;20.44;93.05875;6;5;' 
      '1416383865;0.0806427;-0.4734802;-0.7419281;-16.14367;27.67606;-15.92525;' 
      '53.06408\n52.48165;26;0.04704554;0.9128267;0.4871223;0.1783603;0.2536548;' 
      '0.6368796;0.07435028;0.8879893;0.4615479;-0.1116289;0.1097959;0.04115437;' 
      '0.0.0.0;10.167.22.1;1;0'] 

# On Python 3.x use open("output.csv", "wt", newline="") instead 
with open("output.csv", "wb") as f: # open output.csv for writing 
    writer = csv.writer(f) # create a CSV writer 
    for element in your_list: # iterate over each element in your_list 
     # turn each line into cells by splitting first by a new line, then by a semi-column 
     # then write the resulting cells to the CSV using our CSV writer 
     writer.writerow([v for e in element.split("\n") for v in e.split(";")]) 

結果output.csvが含まれています:

time,timestamp,recordtime,lat,long,alt,speed,course,verticalAccuracy,horizontalAccuracy,locTimeStamp,accelerationX,accelerationY,accelerationZ,HeadingX,HeadingY,HeadingZ,TrueHeading,MagneticHeading,HeadingAccuracy,RotationX,RotationY,RotationZ,motionYaw,motionRoll,motionPitch,motionRotationRateX,motionRotationRateY,motionRotationRateZ,motionUserAccelerationX,motionUserAccelerationY,motionUserAccelerationZ,en0,pdp_ip0,DeviceOrientation,State 
2014-11-19 08:57:45.696,1,1,52.33705,4.843468,8.319668,20.44,93.05875,6,5,1416383865,0.0806427,-0.4734802,-0.7419281,-16.14367,27.67606,-15.92525,53.06408,52.48165,26,0.04704554,0.9128267,0.4871223,0.1783603,0.2536548,0.6368796,0.07435028,0.8879893,0.4615479,-0.1116289,0.1097959,0.04115437,0.0.0.0,10.167.22.1,1,0 
2014-11-19 08:57:45.696,1,1,52.33705,4.843468,8.319668,20.44,93.05875,6,5,1416383865,0.0806427,-0.4734802,-0.7419281,-16.14367,27.67606,-15.92525,53.06408,52.48165,26,0.04704554,0.9128267,0.4871223,0.1783603,0.2536548,0.6368796,0.07435028,0.8879893,0.4615479,-0.1116289,0.1097959,0.04115437,0.0.0.0,10.167.22.1,1,0
+0

うまく働いた、ありがとう! – mroWsymaS

1

をこのコードはあなたの問題を解決する必要があります。

import csv 
def csv_writer(data, path): 
    with open(path, "a",newline='') as csv_file: 
     writer = csv.writer(csv_file) 
     writer.writerow(data) 

data = ['time\ntimestamp\nrecordtime\nlat\nlong\nalt\nspeed\ncourse\nverticalAccuracy\nhorizontalAccuracy\nlocTimeStamp\naccelerationX\naccelerationY\naccelerationZ\nHeadingX\nHeadingY\nHeadingZ\nTrueHeading\nMagneticHeading\nHeadingAccuracy\nRotationX\nRotationY\nRotationZ\nmotionYaw\nmotionRoll\nmotionPitch\nmotionRotationRateX\nmotionRotationRateY\nmotionRotationRateZ\nmotionUserAccelerationX\nmotionUserAccelerationY\nmotionUserAccelerationZ\nen0\npdp_ip0\nDeviceOrientation\nState', '2014-11-19 08:57:45.696;1;1;52.33705;4.843468;8.319668;20.44;93.05875;6;5;1416383865;0.0806427;-0.4734802;-0.7419281;-16.14367;27.67606;-15.92525;53.06408\n52.48165;26;0.04704554;0.9128267;0.4871223;0.1783603;0.2536548;0.6368796;0.07435028;0.8879893;0.4615479;-0.1116289;0.1097959;0.04115437;0.0.0.0;10.167.22.1;1;0','2014-11-19 08:57:45.696;1;1;52.33705;4.843468;8.319668;20.44;93.05875;6;5;1416383865;0.0806427;-0.4734802;-0.7419281;-16.14367;27.67606;-15.92525;53.06408\n52.48165;26;0.04704554;0.9128267;0.4871223;0.1783603;0.2536548;0.6368796;0.07435028;0.8879893;0.4615479;-0.1116289;0.1097959;0.04115437;0.0.0.0;10.167.22.1;1;0'] 
for d in data: 
    csv_writer(d.replace('\n',',').replace(';',',').split(','),'data.csv') 
関連する問題