Merge the lines between triple single quotes and then replace the starting quote with '#'
Merge the lines between triple single quotes and then replace the starting quote with '#'
'''
Created on Mar 11, 2017
@author: XXZ
This file is to demonstrate the word frequency counter. This is a very
important practical
'''
Required Output:
#Created on Mar 11, 2017 @author: XXZ This file is to demonstrate the word frequency counter. This is a very important practical
(I want to count it as a comment)
My Code:
import re
START_PATTERN = "'''n"
END_PATTERN = "'''n"
with open('counter.py') as file:
match = False
newfile = None
for line in file:
if re.match(START_PATTERN, line):
match = True
newfile = open('my_new_file.txt', 'w')
continue
elif re.match(END_PATTERN, line):
match = False
newfile.close()
continue
elif match:
newfile.write(line)
newfile.write('n')
This just writes the last multilines comment in the file. Not all.
Why is the output expecting a split before the word frequency counter?
– Sayse
Aug 30 at 12:16
Its not split, its supposed to be all in the same line.
– nehaj
Aug 30 at 12:17
Why do you want to do this? Unlike docstrings, comments aren't available to
help
etc.– jonrsharpe
Aug 30 at 12:26
help
They aren't just comments. They're docstrings. Maybe adding some real context to the question would help?
– jonrsharpe
Aug 30 at 14:01
4 Answers
4
You can read the whole file in and apply an re.sub
in multiline mode.
Afterwards (or before, doesn't mater...) just crop those three '
and add #
:
re.sub
'
#
import re
with open('test.py', 'r') as f:
txt = f.read()
print('IN:n', txt)
txt = re.sub('n', ' ', txt, flags=re.MULTILINE)
txt = '#' + txt[3:-3]
print('nOUT:n',txt)
IN:
'''
Created on Mar 11, 2017
@author: XXZ
This file is to demonstrate the word frequency counter. This is a very
important practical
'''
OUT:
# Created on Mar 11, 2017 @author: XXZ This file is to demonstrate the word frequency counter. This is a very important practical
Thanks it worked. Can you explain the "flags = re.MULTILINE"
– nehaj
Aug 30 at 12:36
Normally
re
works on a line by line base, so you just can't match newlines. This mode makes re
handle the complete text as one block. See also docs.python.org/3/library/re.html#re.MULTILINE– SpghttCd
Aug 30 at 12:38
re
re
You can use re.sub
to replace one or more new-lines (n
) with a singular space. Then strip the result (of any trailing and leading spaces) and concatenate that onto a '#'
:
re.sub
n
'#'
import re
'#' + re.sub('n+',' ',s).strip()
#'#Created on Mar 11, 2017 @author: XXZ This file is to demonstrate the word frequency counter. This is a very important practical'
Correct, even if I'd replace
'n'
by 's'
, so that two lines do not stick too close together...– SpghttCd
Aug 30 at 12:15
'n'
's'
@SpghttCd My bad, I will update to use a regex
– Joe Iddon
Aug 30 at 12:23
It doesn't concatenate the lines in one line.
– nehaj
Aug 30 at 12:25
@nehaj see the answer now; is it not exactly the same as your desired?
– Joe Iddon
Aug 30 at 12:26
it puts the '#' in front of each line. But doesn't concatenate the lines into one.
– nehaj
Aug 30 at 12:29
Replace n
with . Here is a code:
n
a = '''
Created on Mar 11, 2017
@author: XXZ
This file is to demonstrate the word frequency counter. This is a very
important practical
'''
print("#"+a.replace("n"," "))
Output:
# Created on Mar 11, 2017 @author: XXZ This file is to demonstrate the word frequency counter. This is a very important practical
Using str.join
str.join
Ex:
s = '''
Created on Mar 11, 2017
@author: XXZ
This file is to demonstrate the word frequency counter. This is a very
important practical
'''
print("# "+ " ".join(i.strip() for i in s.split()) )
Output:
# Created on Mar 11, 2017 @author: XXZ This file is to demonstrate the word frequency counter. This is a very important practical
Required, but never shown
Required, but never shown
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
What have you tried, and what are you stuck on?
– John Kugelman
Aug 30 at 12:13