读取CSV文件,操作列,并在新列追加结果.Python 2.7



我在试图操作CSV文件并将结果附加到新列时遇到了一些麻烦。

基本上我有一个csv文件(分隔;),目前有5列(笛卡尔坐标[X, Y]和分量[dX, dY],和大小/长度)。我希望将一些方程的结果添加到这个csv文件的第6列(角度),这些方程的结果取决于我的笛卡尔分量的值。

到目前为止,我的代码是这样的(数学是正确的[希望],这只是我有麻烦的追加):

import csv, math
with open("mydata.csv", "rb") as f:
vectors = csv.reader(f, delimiter=";")
    for col in vectors:
        x = float(col[0])
        y = float(col[1])
        dX = float(col[2])
        dY = float(col[3])
        magnitude = float(col[4])
        if dX > 0 and dY > 0:
            comp = dY/dX
            theta = math.degrees(math.atan(comp))
            angle = 90 - theta
        elif dX > 0 and dY < 0:
            comp = dY/dX
            theta = math.degrees(math.atan(comp))
            angle = 90 + theta
        elif dX < 0 and dY > 0:
            comp = dX/dY
            theta = math.degrees(math.atan(comp))
            angle = 360 - theta
        elif dX < 0 and dY < 0:
            comp = dY/dX
            theta = math.degrees(math.atan(comp))
            angle = 270 - theta

本质上,我想将angle变量添加到第6列,用于我的csv文件的正确行。

我尝试创建一个新的列表并追加(例如):

angles = []
...
angles.append(col)
angles.append(angle)

然而,正如你可能已经猜到的那样,我以这样的一行结束:

[[x, y, dX, dY, magnitude], angle]

提前感谢您的帮助

这个答案太迟了,因为解决方案已经被接受了,但是解决这个问题的最简单的方法是直接将新构造的行写入输出csv文件,而不创建中间列表。

你可以这样写:

import csv, math
with open("mydata.csv", "rb") as f,
     open("newdata.csv", "wb") as g:
        vectors = csv.reader(f, delimiter=";")
        writer = csv.writer(g, delimiter=";")
        for row in vectors:
            # use destructuring
            x, y, dX, dY, magnitude = map(float, row)
            if dX > 0 and dY > 0:
            #<snip>
            # at this stage you can write directly to the output
            # file.
            writer.writerow([x, y, dX, dY, magnitude, angle])

col本身是一个列表,所以您将扩展 angles:

angles.extend(col)
angles.append(angle)

其中list.extend()将元素复制到angles列表中,而不是添加对col列表对象的单个引用。

如果您所做的只是生成一个添加值的新行,只需重用col并直接追加到它:

col.append(angle)

并将其写入您的输出CSV文件。

col是错误的命名,真的,我应该叫它row

因为col列表。你可以将列表项复制到angle中,并添加到

angles=col[:]
angles.append(angle)

相关内容

  • 没有找到相关文章

最新更新