如何使用Python删除CSV文件的第二行

如何使用Python删除CSV文件的第二行,python,csv,row,Python,Csv,Row,我需要删除csv文件的第二行 我正在使用下面的代码,但不幸的是它不工作 data = "" adresse = "SLV.csv" if os.path.exists(adresse) : f = open(adresse,"ab") writer = csv.writer(f,delimiter = ",") reader = csv.reader(open(adresse,"rb") , delimiter = ",") for line in rea

我需要删除csv文件的第二行

我正在使用下面的代码,但不幸的是它不工作

data = ""
adresse = "SLV.csv"

if os.path.exists(adresse) :
    f = open(adresse,"ab")
    writer = csv.writer(f,delimiter = ",") 
    reader = csv.reader(open(adresse,"rb") , delimiter = ",")


    for line in reader:

        if reader.line_num == 2:    
            writer.writerow(line) 

    f.close()

如果我理解正确,您正在尝试创建一个新文件,并且不想插入第2行。 如果这是您的场景,那么您的过程中有一个小错误,即:

if reader.line_num != 2:    
        writer.writerow(line) 

在以下情况下写入临时文件并更新原始文件:

if os.path.exists(adresse) :
    with open(adresse,"r") as f,open("temp.csv" "a+") as temp:    
        writer = csv.writer(temp,delimiter = ",")
        reader = csv.reader(f , delimiter = ",")
        for ind, line in enumerate(reader):
            if ind == 2:
                continue
            else:
               temp.writerow(line)
        temp.seek(0)
        with open(adresse,"w") as out:
            reader = csv.reader(temp , delimiter = ",")
            writer = csv.writer(out,delimiter = ",")
            for row in reader:
                writer.writerow(line)
如果文件可以读入内存,只需调用reader上的列表并删除第二个元素:

if os.path.exists(adresse) :
    with open(adresse,"r") as f:
        reader = list(csv.reader(f , delimiter = ","))
        reader.pop(1)
        with open(adresse,"w") as out:
            writer = csv.writer(out,delimiter = ",")
            for row in reader:
                writer.writerow(row)

由于您要做的只是删除第二行,因此使用csv模块是过分的。不管文件是逗号分隔的数据还是基于诗歌的。写前面的部分,跳过中间的部分,然后写结尾

import shutil

# generate test file
with open('x.txt', 'w') as f:
    for i in range(10):
        f.write('line %d\n' % i)

# skip one line
with open('x.txt','rb') as rd, open('x.txt', 'rb+') as wr:
    wr.write(rd.readline())
    rd.readline()
    shutil.copyfileobj(rd, wr)
    wr.truncate()

print open('x.txt').read()

这里是我的解决方案,您可以编写更少的代码:

>>> import pyexcel as pe         #  pip install pyexcel
>>> sheet = pe.load("SLV.csv")
>>> del sheet.row[1]             # first row starts at index 0
>>> sheet.save_as("SLV.csv")

我同意tdelaney的观点,这是一个更加紧凑的解决方案

lines = open('x.txt', 'r').readlines()
lines.pop(1)
open('x.txt', 'w').writelines(lines)

运行此操作时会发生什么?我不想创建新文件。我只想纠正这一点。我必须写一个完整的新文件吗?我必须在16000个文件上这样做,所以我正在寻找更有效的方法。干杯pal@Dirty_Fox-Riccardo只是指出了您的错误-您的代码只写第2行,他的修复方法是跳过第2行。我希望避免编写临时文件。这可行吗?干杯