我有超过一万行的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行?
答案 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)
这是一种使用内置csv
和fileinput
模块来就地更新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
字典应该为空。