拆分和替换列表中的元素并转换为CSV

2024-05-20 14:17:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将数据、列表转换为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文件名为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'必须被','替换,而','需要换行,在这些行上';'需要是','。我不知道从哪里开始。你知道吗


Tags: 文件csv数据列表timentimestampnlatncourse
3条回答

此代码应该可以解决您的问题:

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

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模块的文档没有问题,我们不是来编写完整代码的。你知道吗

实际上,您的数据中没有逗号—这些是列表索引,或者用新行分隔,或者用半列分隔,因此您只需将这些索引中的每个元素拆分,以获得单独的单元格,最后将所有内容写入标准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

相关问题 更多 >