如何删除或替换csv文件的“ n”行?

时间:2019-03-26 20:08:26

标签: python

我有超过一万行的csv文件。对于每行,我认为用新内容替换它们。我想到删除每一行并添加新内容或直接替换它。

通过这个小例子,我希望使自己理解 我知道如何在“ n”行中插入内容,但不知道如何删除它。我该怎么办?

mycsv.csv

name,last name  
yeison, smith
lola, boa
elmo, spitia
anderson, exneider
juan, ortega

这是我的代码,例如,我想在csv的第2行中添加一行:

with open('mycsv.csv', 'r') as f:
  lines = f.readlines()
  lines.insert(2, 'german, ezequiel') #inserting a new line
  with open('mycsv.csv', 'w') as f:
   f.write(''.join(lines))

例如,我该怎么做才能消除/替换csv的第3行?

2 个答案:

答案 0 :(得分:1)

您正在创建一个列表。您可以修改列表中的值,因此无需插入和删除:

lines[2] = 'german, ezequiel'

或者,有一个Python库用于就地编辑文件。这意味着您不必一次将整个文件读入内存。参见fileinput.input

import fileinput

with fileinput.input('mycsv.csv', inplace=True) as f:
    for line in f:
        if f.lineno() == 2:
            print('german, ezequiel')
        else:
            print(line, end='')

答案 1 :(得分:0)

这是一种使用内置csvfileinput模块来就地更新CSV文件的方法:

import csv
import fileinput


replacements = {
    2: 'german, ezequiel',
    5: 'smith, john',
}

with fileinput.input(files=('mycsv.csv',), backup='.bak', inplace=True,
                     mode='r') as fin:
    reader = csv.reader(fin, skipinitialspace=True)
    print(','.join(next(reader)))  # Copy header row.
    for i, row in enumerate(reader, 1):
        if i in replacements:
            row = replacements.pop(i).replace(',', ' ').split()
        print(','.join(row))

print('done')

然后,如果进行了所有替换,则replacements字典应该为空。