我打开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([.....])
答案 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)