使用csv重写CSV文件

时间:2015-11-04 19:41:35

标签: python csv numpy

我打开CSV文件,将内容转换为numpy数组,然后操纵数组。我现在该如何将其写入新的CSV文件,' newtable.csv'?

file_name = "table.csv" 

import numpy as np

reader=csv.reader(open("table.csv","rb"),delimiter=',')
x=list(reader)
result=np.array(x).astype('str') # convert to numpy array

我不知何故应该使用

writer = csv.writer(open('newtable.csv', 'wb'), delimiter=',')

但是,我没有改变CSV文件的整体结构;我仍然使用相同大小的列和行。 (我只更改了一些数字)我是否必须重写整个事情?

编辑:在numpy数组的情况下,我将如何重写整个内容? np.savetxt("foo.csv", result, delimiter=",")的问题在于格式不正确。必须以某种方式使用格式说明符。

EDIT2:我应该以某种方式使用writerow(),但我不确定这样做的最佳方法。我有一个n形阵列形状(700,12),所以12"列" 700个行条目和"标题"已经存在。

with open("new_file.csv", "w") as toWrite:
    writer = csv.writer(toWrite, delimiter=",")
    writer.writerow([.....])

2 个答案:

答案 0 :(得分:2)

是的,除非您只是附加到现有文件的末尾,否则您必须重写整个文件,以便对内容所做的任何更改。

EDIT2后的响应:

要将2D numpy数组写入CSV文件,您可以执行以下操作。

假设您操纵的2D数组现在称为result_edited

with open('new_file.csv', 'wb') as toWrite:
    writer = csv.writer(toWrite) # if the delimiter is ',', you don't need to specify

    for row in result_edited:
        writer.writerow(row)

你们大部分都在那里!

或者,如果在操作时每行彼此独立,则可以逐行读取和写入。见下文。

file_name_in = 'numeric_table.csv'
file_name_out = 'new_file.csv'

with open(file_name_in, 'rb') as f_in:
    reader = csv.reader(f_in)

    with open(file_name_out, 'wb') as f_out:
        writer = csv.writer(f_out)

        for row in reader:

            # manipulate row, change numbers, etc.

            writer.writerow(row) # Write row to new file

答案 1 :(得分:0)

使用result.tolist()转换numpy数组。这会输出一个Python列表。之后,您可以编写行。

with open("new_file.csv", "w") as toWrite:
    writer = csv.writer(toWrite, delimiter=",")
    resultList = result.tolist()
    writer.writerows(resultList)