如何读取大型csv文件的内容并使用Python中的运算符将它们写入另一个文件?

时间:2016-09-19 17:54:24

标签: python

我有一个来自LiDAR传感器的csv数据文件,看起来像这样,但是还有几十亿行:

scan_0,scan_1,scan_2
timestamp_0,timestamp_1,timestamp_2
7900200,7900225,7900250
logTime_0,logTime_1,logTime_2
27:46.8,27:46.8,27:46.8
distance_0,distance_0,distance_0
132,141,139
136,141,155
139,141,155
138,143,155
138,143,142
139,143,136
138,143,136

这是来自平面传感器的数据。因此,Scan_0是时间戳上特定扫描的列表或“径向”坐标。

我的计划是:

  1. 将CSV文件读入列表
  2. 为每次扫描创建单独的数组(列)
  3. 将扫描数组的每个元素转换为xyz格式,如下例所示。

    scan_0 -----> scan_0
    timestamp_0-> timestamp_0
    7900200-----> 7900200
    logTime_0---> logTime_0
    27:46.8-----> 27:46.8
    distance_0--> distance_0
    132---------> [132*cos(1),132*sin(1),7900200]
    136---------> [136*cos(2),136*sin(2),7900200]
    139---------> [139*cos(3),139*sin(3),7900200]
    138--------->          .          .
    138--------->          .          .
    139--------->          .          .
    138---------> [138*cos(7),139*sin(7),7900200]
    
  4. 将xyz坐标数组写入一个新的csv文件,每行一个坐标'

  5. 最终使用轨迹而不是时间戳来表示来自另一个csv文件的z坐标。

  6. 我告诉你所有这些,所以你对我的动机有一些背景。为了开始这个小项目,我决定简单地尝试将csv文件读入列表并将每行输出到另一个csv文件...从小开始吧?

    这是我到目前为止所做的:

    import csv 
    
    with open("2016_09_16_14_29_09_953.csv", 'r') as f:
        with open("out.csv", "a") as f1:
            x = csv.reader(f)
            my_list = list(x)
            thedatawriter = csv.writer(f1)
            for row in my_list:
                thedatawriter.write(row)
    

    这会创建一个空的csv文件。我在这做错了什么?我觉得自己像蚂蚁攀登珠穆朗玛峰。非常感谢任何帮助,建议和指导。

2 个答案:

答案 0 :(得分:1)

我不确定为什么这不会让你感到沮丧。 csv.writer对象没有写入功能。请尝试使用数据写法。(行)。

答案 1 :(得分:1)

运行代码时,出现以下错误:

AttributeError: '_csv.writer' object has no attribute 'write'

您确定没有收到同样的错误吗?因为基于the documentation of csv,该方法似乎是writerow而不是write

所以,像Rob Davis似乎已经回答了thedatawriter.writerow(row)