2017-10-18 61 views
0

csv文件看起来像:CSV文件给出的字符串

"(-0.16192019, -0.007456851, 0.08841695)","(-0.10439591, 0.024501082, 0.12783173)","(-0.05965481, 0.049002163, 0.12144014)",... 

,但我不希望引号。

我写的功能为:

for j in range(len(sensor_data)): 
    with open(names[j] + "P" + str(i) + ".csv", "wb") as f: 
     writer = csv.writer(f) 
     writer.writerows(sensor_data[j]) 

sensor_data[j]是这样的:

gyro.append((float(merge.iloc[j, 2]), float(merge.iloc[j, 3]), float(merge.iloc[j, 4]))) if merge.iloc[j, 0] == 'Gyroscope' \ 
      else acc.append((float(merge.iloc[j, 2]), float(merge.iloc[j, 3]), float(merge.iloc[j, 4]))) 

为什么没有打印出花车,而不是字符串的元组的元组?

merge = pd.read_csv(final_user_study_path + "/P" + str(i) + "/DataCollection/data/merge.csv") 

合并的样子:

Gyroscope,50958,-0.3387541,0.014913702,0.05965481 
Gyroscope,50978,-0.23009712,0.03621899,0.044741105 
LinearAcceleration,50979,-0.09891046,0.119261175,-0.108936176 
Gyroscope,50998,-0.1768339,0.066046394,0.040480047 
LinearAcceleration,50999,-0.0863409,0.18240824,-0.07152677 

类型所有这些值都是字符串。

我想:

(-0.16192019, -0.007456851, 0.08841695),(-0.10439591, 0.024501082, 0.12783173),(-0.05965481, 0.049002163, 0.12144014),... 
+0

其中'merge'定义了吗? –

+0

已编辑的问题陈述 – dirtysocks45

+0

编辑问题陈述 – dirtysocks45

回答

1

要加上引号在需要的时候停止csv.writer()(因为它发现在单元格的分隔符),加上quoting参数如下:

writer = csv.writer(f, quoting=csv.QUOTE_NONE) 

见CSV文档:csv.QUOTE_NONE

这将是更好的解开元组,使他们各自正确地得到自己的单元格w没有任何额外的括号。这可能会使用itertools.chain.from_iterable()来完成,以将所有元组合并到一个列表中。例如:

from itertools import chain 

row = [(-0.16192019, -0.007456851, 0.08841695), (-0.10439591, 0.024501082, 0.12783173), (-0.05965481, 0.049002163, 0.12144014)] 

print row 
print list(chain.from_iterable(row)) 

这将显示:

[(-0.16192019, -0.007456851, 0.08841695), (-0.10439591, 0.024501082, 0.12783173), (-0.05965481, 0.049002163, 0.12144014)] 
[-0.16192019, -0.007456851, 0.08841695, -0.10439591, 0.024501082, 0.12783173, -0.05965481, 0.049002163, 0.12144014] 

正如你所看到的,第二行显示的是所有的记录都被夷为平地到一个列表。

+0

如果我想元组具有某些标签,例如(0,1,2) [0,1,2]。我想在csv。 – dirtysocks45

+1

中的每一个单独的列中使用'.writerow()'来写一行,每行使用'chain.from_iterable( )'把元组扁平化为一个列表 –

+1

我删除了我的评论,因为我意识到你的解决方案给了我所需要的东西。 – dirtysocks45