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

2024-05-29 05:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个超过10000行的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行


Tags: 文件csvname内容aswithopen例子
2条回答

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

lines[2] = 'german, ezequiel'

另外,还有一个Python库用于文件的就地编辑。这意味着您不必一次性将整个文件读入内存。见^{}

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='')

下面是一种使用内置^{}^{}模块就地更新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字典应该是空的

相关问题 更多 >

    热门问题