如何使用Python删除CSV文件的第二行
我需要删除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
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行。我希望避免编写临时文件。这可行吗?干杯