我有一个大的csv文件(1Gb),我需要以这种格式读取,处理并写入新的csv文件。
TimeStamp, header1, header2, header3, ....
0:00:53:922:131, data1, , , ....
0:00:54:922:131, , data2, , ....
0:00:55:922:131, , , data3, ....
输入csv文件有以下格式(有些没有头)
Timestamp, info1, info2, info3, ......
0:00:53:922:131, info_bit1,info_bit2 ,info_bit3 , ....
0:00:54:922:131, info_bit1,info_bit2 ,info_bit3 , ....
0:00:55:922:131, info_bit1,info_bit2 ,info_bit3 , ....
头及其数据在处理从读取的csv文件中的每行时作为字典检索。
下面是我的代码片段:import pandas as pd
for chunk in chunks:
for col in chunk.values:
ts = col[0]
msgID = int(str(col[5]), 16)
dlc = col[6]
eol = 8+dlc
concatData = ""
for data in col[8:eol]:
data = str(data).zfill(2)
concatData += data
hexData = bytes.fromhex(concatData)
dataMap = {ts:test.decode(int(msgID), hexData)}
pd.DataFrame.from_dict(dataMap, orient='index').to_csv(outputfile, mode='a')
print('{} {}'.format(ts, test.decode(int(msgID), hexData)))
time.sleep(0.01)
test.decode返回{'key_name1': value,'key_name2': value,'key_name3': value}并且每个调用可能有不同的大小,有些有4,有些有8,等等。同样的键将在不同的时间戳再次追加。我将时间戳附加到这个字典并创建一个新字典。
我得到的输出是,,key1_name1,key1_name2,key1_name3,,,,,,,,,,,,,,,
0:00:53:915:439,value1,value2,value3,,,,,,,,,,,,,,,
,key2_name1,key2_name2,key2_name3,key2_name4,,,,,,,,,,,,,,,
0:00:53:915:613,value1,value2,value3,value4,,,,,,,,,,,,,,,,
下面是我想要的输出文件:
Timestamp, key1_name1, key1_name2,key2_name1,key2_name2,key2_name3,key2_name4,,,,,,
0:00:53:915:439,key1_value1,key1_value2,key1_value3,,,,,,
0:00:53:915:613,,,,,,key2_value1,key2_value2,key2_value3,key2_value4,,,,,,,,,,,,
0:00:54:915:613,key1_value4,key1_value5,key1_value6,,,,,,,,
0:00:55:915:613,,,,,key2_value5,key2_value6,key2_value7,key2_value8,key2_value9,,,,,
它将有100个键名,我想只保留在标题中,尽管值将出现在不同的时间戳。
我如何将标题附加到现有的列和数据,从某些行/列开始?
我认为你可以用传统的方式处理open
my_data = [] # list of dict
with open('output.csv','a') as f:
for d in my_data:
f.write("".join([str(i)+"," for i in d.values()])[:-1]+"n")