user12361005
user12361005

Reputation:

how to remove "\n" from a list of strings

I have a list that is read from a text file that outputs:

['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']

I want to remove the \n from each element, but using .split() does not work on lists only strings (which is annoying as this is a list of strings).

How do I remove the \n from each element so I can get the following output:

['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']

Upvotes: 1

Views: 281

Answers (7)

Darko
Darko

Reputation: 119

Here is another way to do it with lambda:

cleannewline = lambda somelist : map(lambda element: element.strip(), somelist)

Then you can just call it as:

cleannewline(yourlist)

Upvotes: 0

codrelphi
codrelphi

Reputation: 1065

There are many ways to achieve your result.

Method 1: using split() method

l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
result = [i.split('\n')[0] for i in l]

print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']

Method 2: using strip() method that removes leading and trailing whitespace

 l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
result = [i.strip() for i in l]

print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']

Method 3: using rstrip() method that removes trailing whitespace

l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
result = [i.rstrip() for i in l]

print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']

Method 4: using the method replace

l = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']

result = [i.replace('\n', '') for i in l]

print(result) # ['/Users/myname/Documents/test1.txt', '/Users/myname/Documents/test2.txt', '/Users/myname/Documents/test3.txt']

Upvotes: 0

Martín Nieva
Martín Nieva

Reputation: 504

old_list = [x.strip() for x in old_list]

old_list refers to the list you want to remove the \n from.

Or if you want something more readable:

for x in range(len(old_list)):
    old_list[x] = old_list[x].strip()

Does the same thing, without list comprehension.

strip() method takes out all the whitespaces, including \n.

But if you are not ok with the idea of removing whitespaces from start and end, you can do:

old_list = [x.replace("\n", "") for x in old_list]

or

for x in range(len(old_list)):
    old_list[x] = old_list[x].replace("\n", "")

Upvotes: 2

Josh Harold
Josh Harold

Reputation: 103

You can read the whole file and split lines using str.splitlines:

temp = file.read().splitlines()

if you still have problems go to this question where I got the answer from

How to read a file without newlines? answered Sep 8 '12 at 11:57 Bakuriu

Upvotes: 0

Use:

[i.strip() for i in lines]

in case you don't mind to lost the spaces and tabs at the beginning and at the end of the lines.

Upvotes: 0

Arkenys
Arkenys

Reputation: 353

Give this code a try:

lst = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']

for n, element in enumerate(lst):
    element = element.replace('\n', '')
    lst[n] = element

print(lst)

Upvotes: 0

do a strip but keep in mind that the result is not modifying the original list, so you will need to reasign it if required:

a = ['/Users/myname/Documents/test1.txt\n', '/Users/myname/Documents/test2.txt\n', '/Users/myname/Documents/test3.txt\n']
a = [path.strip() for path in a]
print a

Upvotes: 0

Related Questions