我想删除特定行并重新分配行号:
例如:
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()
以上行可以删除特定行#,但我不知道如何在第一行'之前重写行号,'
答案 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()
参数n
和file
分别是您要删除的行和文件路径。
这是假设行号写在示例输入所暗示的行中。
如果每行开头没有包含该行号,正如其他一些答案所假设的那样,只需删除第一个if语句:
if i > n:
f.write(d[i].replace(d[i].split(",")[0],str(i -1)))