Convert a Python block of code into a single line

Below is the python block code,

def compute_hcf(x, y): while(y): x, y = y, x % y return x

which I wanted to convert into single line like below,

def compute_hcf(x, y):\n\t while(y): \n\t\t x, y = y, x % y \n\t return x

I've the below approach to solve this,

def convert(fname): newLines = '' with open(fname, 'r') as f: for line in f: num_spaces = 0 for letter in line: if letter != ' ': break num_spaces += 1 if num_spaces == 3: line = line.replace(' '*3, '\\t') #If number of Spaces is 3, replace with a single tab elif num_spaces == 4: line = line.replace(' '*4, '\\t') #If number of Spaces is 4, replace with a single tab elif num_spaces == 7: line = line.replace(' ' *7, '\\t\\t') #If number of Spaces is 7, replace with double tab elif num_spaces == 8: line = line.replace(' ' * 8, '\\t\\t') #If number of Spaces is 8, replace with double tab line = line + '\\n' #Adding new line at the end of the line newLines = newLines + line converted = ''.join(newLines) print(converted)
convert('fileWithInputContent.txt')

Actual Output:

def compute_hcf(x, y):
\n\twhile(y):
\n\t\tx, y = y, x % y
\n\treturn x\n

Expected Output:

def compute_hcf(x, y):\n\t while(y): \n\t\t x, y = y, x % y \n\t return x
3

1 Answer

When you read text from a file in python, there is automatically a newline character added to the end of each line. So when we print out the strings that python reads it looks like this.

image showing that there is a newline character at the end of the string

This is why the actual output has newlines. So in order to fix this, we just need to remove the newline character with something like this.

if '\n' in line: line = line.replace('\n', '')

The code with this addition looks like this.

def convert(fname):
newLines = ''
with open(fname, 'r') as f: for line in f: # print each string # print(repr(line)) if '\n' in line: line = line.replace('\n', '') num_spaces = 0 for letter in line: if letter != ' ': break num_spaces += 1 if num_spaces == 3: line = line.replace(' '*3, '\\t') #If number of Spaces is 3, replace with a single tab elif num_spaces == 4: line = line.replace(' '*4, '\\t') #If number of Spaces is 4, replace with a single tab elif num_spaces == 7: line = line.replace(' ' *7, '\\t\\t') #If number of Spaces is 7, replace with double tab elif num_spaces == 8: line = line.replace(' ' * 8, '\\t\\t') #If number of Spaces is 8, replace with double tab line = line + '\\n' #Adding new line at the end of the line newLines = newLines + line
converted = ''.join(newLines)
print(converted)

And it works!

def compute_hcf(x, y):\n\twhile(y):\n\t\tx, y = y, x % y\n\treturn x\n

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like