使用dictwriter在相同的csv文件中覆盖行 [英] Overwriting row in same csv file using dictwriter

查看:220
本文介绍了使用dictwriter在相同的csv文件中覆盖行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有names.csv

  first_name,last_name 
Baked,Beans
Lovely,Spam
John,Bang
Harry,Potter

我想重命名John Ban与jason statham在同一个文件。
我尝试使用file.seek()但失败了

  import csv 
with open home / tiwari / Desktop / names.csv','rw +')as csvfile:
fieldnames = ['first_name','last_name']
writer = csv.DictWriter(csvfile,fieldnames = fieldnames)
reader = csv.DictReader(csvfile)
对于行,enumerate中的行(读者):
rs = sys.getsizeof(row)
if row ['first_name'] == 'John':
csvfile.seek(-rs)
writer.writerow({'first_name':'Jason','last_name':'statham'})


解决方案

除非替换字符串与原始字符串的长度完全相同,否则方法将无效。 p>

我建议读取所有行,并替换它们,然后写回。

  import csv 

with open('/ home / tiwari / Desktop / names.csv','r +')as csvfile:
reader = csv.DictReader(csvfile)

rows = []
读取行:
if row ['first_name'] =='John':
row ['first_name'] ='Jason'
row ['last_name'] ='Statham'
rows.append(row)

csvfile.seek(0)#回到文件的开头。
fieldnames = ['first_name','last_name']
writer = csv.DictWriter(csvfile,fieldnames = fieldnames)
writer.writeheader()
writer.writerows
csvfile.truncate()#如果更新的内容较短。


I have names.csv

first_name,last_name
Baked,Beans
Lovely,Spam
John,Bang
Harry,Potter

I want to rename "John Ban" with "jason statham" in same file. I tried to use file.seek() but failed

import csv
with open('/home/tiwari/Desktop/names.csv', 'rw+') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    reader = csv.DictReader(csvfile)
    for line, row in enumerate(reader):
        rs = sys.getsizeof(row)
        if row['first_name'] == 'John':
            csvfile.seek(-rs)
            writer.writerow({'first_name': 'Jason', 'last_name': 'statham'})

解决方案

Your approach will not work unless the replacement string is exactly same length with the original string.

I suggest to read all rows, and replace them, and write it back.

import csv

with open('/home/tiwari/Desktop/names.csv', 'r+') as csvfile:
    reader = csv.DictReader(csvfile)

    rows = []
    for row in reader:
        if row['first_name'] == 'John':
            row['first_name'] = 'Jason'
            row['last_name'] = 'Statham'
        rows.append(row)

    csvfile.seek(0)  # back to begining of the file.
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(rows)
    csvfile.truncate()  # In case of updated content is shorter.

这篇关于使用dictwriter在相同的csv文件中覆盖行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆