在同一个 csv 文件上读取和写入

发布于 2024-09-08 06:56:22 字数 527 浏览 0 评论 0原文

我正在尝试在同一个 CSV 文件上读取和写入:

file1 = open(file.csv, 'rb')
file2 = open(file.csv, 'wb')
reader = csv.reader(file1)
writer = csv.writer(file2)
for row in reader:
   if row[2] == 'Test':
      writer.writerow( row[0], row[1], 'Somevalue')

我的 csv 文件是:

  • val1,2323,Notest
  • val2, 2323,Test

所以基本上如果我的 row [2] 值是 Test 我想将其替换为 Some new value。 上面的代码给了我空的 CSV 文件。

I am trying to read and write on the same CSV file:

file1 = open(file.csv, 'rb')
file2 = open(file.csv, 'wb')
reader = csv.reader(file1)
writer = csv.writer(file2)
for row in reader:
   if row[2] == 'Test':
      writer.writerow( row[0], row[1], 'Somevalue')

My csv files are:

  • val1,2323,Notest
  • val2, 2323,Test

So basically if my row[2] value is Test I want to replace it with Some new value.
The above code gives me empty CSV files.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

流年里的时光 2024-09-15 06:56:22

您应该使用不同的输出文件名。即使您希望名称相同,也应该使用一些临时名称,最后重命名文件。

当您以“w”(或“wb”)模式打开文件时,该文件将被“清除”——整个文件内容都会消失。 open() 的 Python 文档说:

... 'w' 仅用于写入(同名的现有文件将被删除),...

所以你的文件在 csv 函数开始解析它之前被删除。

You should use different output file name. Even if you want the name to be the same, you should use some temporary name and finally rename file.

When you open file in 'w' (or 'wb') mode this file is "cleared" -- whole file content disappears. Python documentation for open() says:

... 'w' for only writing (an existing file with the same name will be erased), ...

So your file is erased before csv functions start parsing it.

似狗非友 2024-09-15 06:56:22

您无法同时以读取写入模式打开文件。

您的代码可以修改如下: -

# Do the reading
file1 = open(file.csv, 'rb')
reader = csv.reader(file1)
new_rows_list = []
for row in reader:
   if row[2] == 'Test':
      new_row = [row[0], row[1], 'Somevalue']
      new_rows_list.append(new_row)
file1.close()   # <---IMPORTANT

# Do the writing
file2 = open(file.csv, 'wb')
writer = csv.writer(file2)
writer.writerows(new_rows_list)
file2.close()

正如 Jason 指出的,如果您的 CSV 对于您的内存来说太大,那么您需要写入不同的文件名,然后重命名它。这可能会慢一些。

You can't open a file in both read and write modes at once.

Your code could be modified as follows:-

# Do the reading
file1 = open(file.csv, 'rb')
reader = csv.reader(file1)
new_rows_list = []
for row in reader:
   if row[2] == 'Test':
      new_row = [row[0], row[1], 'Somevalue']
      new_rows_list.append(new_row)
file1.close()   # <---IMPORTANT

# Do the writing
file2 = open(file.csv, 'wb')
writer = csv.writer(file2)
writer.writerows(new_rows_list)
file2.close()

As Jason points out, if your CSV is too big for your memory, then you'll need to write to a different filename and then rename it. This will likely be a bit slower.

嘦怹 2024-09-15 06:56:22

如果您的 csv 文件不够大(无法占用内存),请将其全部读入内存并关闭文件,然后再以写入模式打开它。

或者您应该考虑写入一个新文件而不是同一个文件。

If your csv file is not big enough(to explode the memory), read it all into memory and close the file before open it in write mode.

Or you should consider writing to a new file rather than the same one.

三岁铭 2024-09-15 06:56:22

在 python 中,不可能以两种不同的模式打开同一个文件。在以另一种模式打开文件之前,必须使用 file_name.close() 释放其中一个文件指针!

It is not possible to open the same file in two different modes in python.You have to release one of the file pointers with file_name.close() before opening the file in another mode!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文