python删除特定行并重新分配行号

时间:2015-07-02 22:54:04

标签: python

我想删除特定行并重新分配行号:

例如:

0,abc,def
1,ghi,jkl
2,mno,pqr
3,stu,vwx

我想要的是:如果第1行是需要删除的行,那么 输出应该是:

0,abc,def
1,mno,pqr
2,stu,vwx

到目前为止我做了什么:

f=open(file,'r')
lines = f.readlines()
f.close()
f.open(file,'w')
for line in lines:
    if line.rsplit(',')[0] != 'line#':
        f.write(line)
f.close()

以上行可以删除特定行#,但我不知道如何在第一行'之前重写行号,'

3 个答案:

答案 0 :(得分:1)

我注意到您的帐户并非在过去几个小时内创建,因此我认为向您提供疑问是无益的。如果你花时间学习它的文化,你将在StackOverflow上获得更多乐趣。

我写了一个解决方案,符合你已经编写的文件的问题标准(你提到你正在打开一个文本文件),所以我认为它是一个CSV。

我认为我会以不同于实现APEX_JSON并使用临时文件的其他解决方案来回答您的问题。

import re
numline_csv = re.compile("\d\,")

# substitute your actual file opening here
so_31195910 = """
0,abc,def
1,ghi,jkl
2,mno,pqr
3,stu,vwx
"""
so = so_31195910.splitlines()

# this could be an input or whatever you need 
delete_line = 1
line_bank = []

for l in so:
    if l and not l.startswith(str(delete_line)+','):
        print(l)
        l = re.split(numline_csv, l)
        line_bank.append(l[1])

so = []
for i,l in enumerate(line_bank):
    so.append("%s,%s" % (i,l))

输出:

>>> so
['0,abc,def', '1,mno,pqr', '2,stu,vwx']

答案 1 :(得分:1)

为了获得每一行的行号,您应该使用枚举方法...

for line_index, line in enumerate(lines):
  # line_index is 0 for the first line, 1 for the 2nd line, &ct

为了将字符串的第一个元素与字符串的其余部分分开,我建议将 maxsplit 的值传递给split方法。

>>> '0,abc,def'.split(',')
['0', 'abc', 'def']
>>> '0,abc,def'.split(',',1)
['0', 'abc,def']
>>>

一旦有了这两个,只需将line_index连接到split(',',1)[1]

答案 2 :(得分:1)

这是一个能完成这项工作的功能。

def removeLine(n, file):
    f = open(file,"r+")
    d = f.readlines()
    f.seek(0)
    for i in range(len(d)):
        if i > n:
            f.write(d[i].replace(d[i].split(",")[0],str(i -1)))
        elif i != n:
            f.write(d[i])
    f.truncate()
    f.close()

参数nfile分别是您要删除的行和文件路径。

这是假设行号写在示例输入所暗示的行中。

如果每行开头没有包含该行号,正如其他一些答案所假设的那样,只需删除第一个if语句:

 if i > n:
        f.write(d[i].replace(d[i].split(",")[0],str(i -1)))