Convert a Python Block of Code into a Single Line

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

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.

Maya Lin-Takahashi
Author

Maya Lin-Takahashi

Maya is a hardware enthusiast who tests and reviews smart home devices, smartphones, wearables, and audio gear. She focuses on practical consumer value and build quality.