То, что вы просите в своем описании, не совпадает ни с чем в вашем вводном примере или даже близко к нему. Ни одна из ваших строк не начинается с )
. Одна из ваших строк начинается с некоторого пробела и а), но строка перед этим является пустой строкой, а последняя непустая строка перед ней не имеет запятой, которую можно удалить.
Но я проигнорирую пример ввода и объясню, как сделать то, что вы просили в описании.
Самый простой способ - просто отслеживать предыдущую строку и повторять строки:
lastline = None
for line in infile:
line = line.rstrip()
if line.startswith(")"):
if lastline is not None:
lastline = lastline.rstrip(",")
if lastline is not None:
outfile.write(lastline + '\n')
lastline = line
if lastline is not None:
outfile.write(lastline + '\n')
Вы можете сделать это немного чище и компактнее, используя pairwise
оболочку итератора, как в рецептах itertools
, но немного измененную, чтобы добавить в конце "лишнюю" пару :
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return itertools.zip_longest(a, b, fillvalue='')
stripped = (line.rstrip() for line in infile)
for line, nextline in pairwise(stripped):
if nextline.startswith(")"):
line = line.rstrip(",")
if line is not None:
outfile.write(line + '\n')