【问题标题】:Re-writing a CSV file using csv使用 csv 重写 CSV 文件
【发布时间】:2015-11-06 06:38:49
【问题描述】:

我以 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(),但我不确定最好的方法。我有一个形状为 (700,12) 的 numpy 数组,所以这是 700 行条目的 12 个“列”,并且“标题”已经存在。

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

【问题讨论】:

  • 您是在问“我现在如何将其写入新的 CSV 文件‘newtable.csv’?”还是您在问“我是否必须重新编写整个内容?”如果是前者,这是stackoverflow.com/questions/6081008/… 的副本。如果是后者,答案是“是”。
  • 我不经常使用 numpy 进行 csv 读/写操作,但使用 pandas 来处理这类事情非常简单。考虑使用 pandas 进行 CSV 读/写和表格数据操作。
  • @Robᵩ 对于前者,请参阅我上面的编辑。
  • 您是在逐行操作 CSV 文件还是在 CSV 的列中操作?如果逐行,您可以在读取 CSV 时处理/操作每一行,并在完成每一行时写入一个新文件。 Pandas 绝对是一个好方法 - 你可以将 2D 的 numpy array 转换为 DataFrame,然后转到 .to_csv()(请参阅 stackoverflow.com/questions/21938932/… 以转换为 DataFrame

标签: python csv numpy


【解决方案1】:

是的,除非您只是追加到现有文件的末尾,否则您必须重新编写整个文件才能对内容进行任何更改。

EDIT2 后的响应:

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

假设您操作的二维数组现在称为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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-28
      • 2015-10-18
      • 2016-10-22
      • 2011-08-19
      • 1970-01-01
      相关资源
      最近更新 更多