Python Forum
Remove all \n from end of list items - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/Forum-Python-Coding)
+--- Forum: General Coding Help (https://python-forum.io/Forum-General-Coding-Help)
+--- Thread: Remove all \n from end of list items (/Thread-Remove-all-n-from-end-of-list-items)



Remove all \n from end of list items - JackMack118 - Dec-27-2019

Hello all,

I've been Googling and reading here, reading StackOverflow but can't solve what I feel is a very simple problem.

I cannot strip off the trailing '\n' from all my list items in list. I've tried a few dozen examples online and they never work for me, I then thought maybe I need something in my library but all seems well covered there too.

I'm not going to give all the failing examples here, there is no point.

Here are all the errors I'm getting using the different techniques:

AttributeError: 'list' object has no attribute 'rstrip'
AttributeError: 'list' object has no attribute 'strip'
<map object at 0x000001A36C428D30> (I know, not an error but what I got trying example)
TypeError: descriptor 'strip' for 'str' objects doesn't apply to a 'list' object
TypeError: expected string or bytes-like object
AttributeError: type object 'DataFrame' has no attribute 'res'
TypeError: 'list' object is not callable
TypeError: expected string or bytes-like object

I tried everything, I just don't get why I can't simply strip off the trailing \n in all my items.

Is there a special library for it, because everyone with their answers all seem to work.

Here is what I'm originally doing though:

res = []
with open('sample.txt', 'r') as fin:
    data = fin.read().splitlines(True)
with open('sample.txt', 'w') as fout:
    res.append(data[:200])
    fout.writelines(data[200:])
print(res)
I'm getting 200 lines from a txt file and simultaneously creating a list of the proxies to use in my program, but they all have the newlines from when they being appended.

Thanks for any help.


hmmm, I'm just now noticing the double brackets on my new list:

[['203.215.181.219:36342\n', 
'200.149.0.74:8080\n', '46.209.98.227:8080\n', '150.95.131.174:3128\n']]



RE: Remove all \n from end of list items - perfringo - Dec-27-2019

You can simply strip newline from the end of the string. But is this actually needed?


RE: Remove all \n from end of list items - JackMack118 - Dec-27-2019

Hello yes because I set it as a proxy for requests. I've been doing all the strip methods, string strip methods and keep getting all the errors I mentioned in the OP.

I think it's because it's not turning into a list because of the double [[]], that's why the stripping is bringing errors.

OK, I have a working example but I open file 3 times which is probably not a good idea for speed. What I need to do is get 200 lines from a text file into a list, and delete those 200 lines simultaneously.

Anyway this works, but I think it's not best:

with open("sample.txt") as myfile:
    res = [next(myfile).strip() for x in range(200)]
with open('sample.txt', 'r') as fin:
    data = fin.read().splitlines(True)
with open('sample.txt', 'w') as fout:
    fout.writelines(data[200:])
print(res)

Ok, keep answering my own post, I've slimmed down, this works best.

with open('sample.txt', 'r') as fin:
    res = [next(fin).strip() for x in range(200)]
    data = fin.read().splitlines(True)
with open('sample.txt', 'w') as fout:
    fout.writelines(data[200:])
print(res)



RE: Remove all \n from end of list items - snippsat - Dec-27-2019

You are doing two task here making a list and wirte to file.
Let say this is sample.txt.
Output:
203.215.181.219:36342 200.149.0.74:8080 46.209.98.227:8080 150.95.131.174:3128
Now just do the witting to file part and it seems okay.
with open('sample.txt', 'r') as fin:
    data = fin.read().splitlines(True)
with open('sample1.txt', 'w') as fout:
    fout.writelines(data[2:])
Other name sample1.txt so it don't overwrite original in this test.
Output:
46.209.98.227:8080 150.95.131.174:3128
Getting a list without \n could be done like this.
with open('sample.txt', 'r') as fin:
    data = [i.strip() for i in fin]
Output:
>>> data ['203.215.181.219:36342', '200.149.0.74:8080', '46.209.98.227:8080', '150.95.131.174:3128']
Writing back from this list could be.
with open('sample.txt', 'r') as fin:
    data = [i.strip() for i in fin]
with open('sample2.txt', 'w') as fout:
    for ip in data[:2]:
        fout.write(f'{ip}\n')
Output:
203.215.181.219:36342 200.149.0.74:8080



RE: Remove all \n from end of list items - perfringo - Dec-27-2019

Another possibility is to use split('\n') instead of splitlines.

Using data provided by snippsat in file named ip.txt:

>>> with open('ip.txt', 'r') as f: 
...     data = f.read().split('\n') 
...
>>> data
['203.215.181.219:36342',
 '200.149.0.74:8080',
 '46.209.98.227:8080',
 '150.95.131.174:3128']
I still don't understand why it's good idea to strip newlines while reading the file and then put them back while writing to file (I know, I am slow today).