klijo
klijo

Reputation: 16451

How can I read a text file into a string variable and strip newlines?

I have a text file that looks like:

ABC
DEF

How can I read the file into a single-line string without newlines, in this case creating a string 'ABCDEF'?


For reading the file into a list of lines, but removing the trailing newline character from each line, see How to read a file without newlines?.

Upvotes: 1397

Views: 2423645

Answers (27)

gerardw
gerardw

Reputation: 6329

Python 3: See List Comprehensions for the square bracket syntax.

 with open('data.txt') as f:
     lines = [ line.rstrip('\n') for line in f ]

Upvotes: 5

Pedro Lobito
Pedro Lobito

Reputation: 99001

To join all lines into a string and remove new lines, I normally use:

with open('t.txt') as f:
  s = " ".join([l.rstrip("\n") for l in f]) 

Upvotes: 68

Michael Smith
Michael Smith

Reputation: 75

You can compress this into one into two lines of code!

content = open('filepath', 'r').read().replace('\n', ' ')
print(content)

If your file reads:

hello how are you?
who are you?
blank blank

Python output

hello how are you? who are you? blank blank

Upvotes: 6

MagerValp
MagerValp

Reputation: 2957

Use:

with open("data.txt") as myfile:
    data = "".join(line.rstrip() for line in myfile)

join() will join a list of strings, and rstrip() without any arguments will trim whitespace, including newlines, from the end of strings.

Upvotes: 35

sleeplessnerd
sleeplessnerd

Reputation: 22781

You could use:

with open('data.txt', 'r') as file:
    data = file.read().replace('\n', '')

Or if the file content is guaranteed to be one line:

with open('data.txt', 'r') as file:
    data = file.read().rstrip()

Upvotes: 1959

Nafis Ahmad
Nafis Ahmad

Reputation: 2761

You can read from a file in one line:

str = open('very_Important.txt', 'r').read()

Please note that this does not close the file explicitly.

CPython will close the file when it exits as part of the garbage collection.

But other Python implementations won’t. To write portable code, it is better to use with or close the file explicitly. Short is not always better. See Is explicitly closing files important?

Upvotes: 115

Lakshaya Maheshwari
Lakshaya Maheshwari

Reputation: 512

Use:

with open(player_name, 'r') as myfile:
    data = myfile.readline()
    list = data.split(" ")
    word = list[0]

This code will help you to read the first line and then using the list and split option, you can convert the first line word separated by space to be stored in a list.

then you can easily access any word, or even store it in a string.

You can also do the same thing with using a for loop.

Upvotes: 0

Try this:

x = "yourfilename.txt"
y = open(x, 'r').read()

print(y)

Upvotes: 4

Julian
Julian

Reputation: 4800

There is also splitlines():

with open ("data.txt", "r") as myfile:
    data = myfile.read().splitlines()

Variable data is now a list that looks like this when printed:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

Note there aren't any newlines (\n).

At that point, it sounds like you want to print back the lines to console, which you can achieve with a for loop:

for line in data:
    print(line)

Upvotes: 20

Loochie
Loochie

Reputation: 2472

This can be done using the read() method:

text_as_string = open('Your_Text_File.txt', 'r').read()

Or as the default mode itself is 'r' (read) so simply use,

text_as_string = open('Your_Text_File.txt').read()

Upvotes: 18

user11735387
user11735387

Reputation:

You could try this. I use this in my programs.

Data = open('data.txt', 'r')
data = Data.readlines()
for i in range(len(data)):
    data[i] = data[i].strip() + ' '
data = ''.join(data).strip()

Upvotes: 2

Alex
Alex

Reputation: 970

A regular expression works too:

import re
with open("depression.txt") as f:
     l = re.split(' ', re.sub('\n',' ', f.read()))[:-1]

print (l)

Output:

['I', 'feel', 'empty', 'and', 'dead', 'inside']

Upvotes: 2

Palak Jain
Palak Jain

Reputation: 683

Try the following:

with open('data.txt', 'r') as myfile:
    data = myfile.read()

    sentences = data.split('\\n')
    for sentence in sentences:
        print(sentence)

Caution: It does not remove the \n. It is just for viewing the text as if there weren’t any \n.

Upvotes: -3

yota
yota

Reputation: 2230

Use:

from pathlib import Path
line_lst = Path("to/the/file.txt").read_text().splitlines()

It is the best way to get all the lines of a file. The '\n' are already stripped by the splitlines() (which smartly recognize win/mac/unix lines types).

But if nonetheless you want to strip each lines:

line_lst = [line.strip() for line in txt = Path("to/the/file.txt").read_text().splitlines()]

strip() was just a useful exemple, but you can process your line as you please.

At the end, do you just want concatenated text?

txt = ''.join(Path("to/the/file.txt").read_text().splitlines())

Upvotes: 4

My Car
My Car

Reputation: 4576

Here are four codes for you to choose one:

with open("my_text_file.txt", "r") as file:
    data = file.read().replace("\n", "")

or

with open("my_text_file.txt", "r") as file:
    data = "".join(file.read().split("\n"))

or

with open("my_text_file.txt", "r") as file:
    data = "".join(file.read().splitlines())

or

with open("my_text_file.txt", "r") as file:
    data = "".join([line for line in file])

Upvotes: 12

Machinexa
Machinexa

Reputation: 599

Oneliner:

  • List: "".join([line.rstrip('\n') for line in open('file.txt')])

  • Generator: "".join((line.rstrip('\n') for line in open('file.txt')))

List is faster than generator but heavier on memory. Generators are slower than lists and is lighter for memory like iterating over lines. In case of "".join(), I think both should work well. .join() function should be removed to get list or generator respectively.

  • Note: close() / closing of file descriptor probably not needed

Upvotes: 4

Roksolanka Fedkovych
Roksolanka Fedkovych

Reputation: 115

with open('data.txt', 'r') as file:
    data = [line.strip('\n') for line in file.readlines()]
    data = ''.join(data)

Upvotes: 1

whirlwin
whirlwin

Reputation: 16541

I have fiddled around with this for a while and have prefer to use use read in combination with rstrip. Without rstrip("\n"), Python adds a newline to the end of the string, which in most cases is not very useful.

with open("myfile.txt") as f:
    file_content = f.read().rstrip("\n")
    print(file_content)

Upvotes: 12

hungneox
hungneox

Reputation: 9829

f = open('data.txt','r')
string = ""
while 1:
    line = f.readline()
    if not line:break
    string += line

f.close()


print(string)

Upvotes: 7

Sma Ma
Sma Ma

Reputation: 3715

To remove line breaks using Python you can use replace function of a string.

This example removes all 3 types of line breaks:

my_string = open('lala.json').read()
print(my_string)

my_string = my_string.replace("\r","").replace("\n","")
print(my_string)

Example file is:

{
  "lala": "lulu",
  "foo": "bar"
}

You can try it using this replay scenario:

https://repl.it/repls/AnnualJointHardware

enter image description here

Upvotes: 3

Sudi.JS
Sudi.JS

Reputation: 3984

In Python 3.5 or later, using pathlib you can copy text file contents into a variable and close the file in one line:

from pathlib import Path
txt = Path('data.txt').read_text()

and then you can use str.replace to remove the newlines:

txt = txt.replace('\n', '')

Upvotes: 310

Sai Kiriti Badam
Sai Kiriti Badam

Reputation: 960

You can also strip each line and concatenate into a final string.

myfile = open("data.txt","r")
data = ""
lines = myfile.readlines()
for line in lines:
    data = data + line.strip();

This would also work out just fine.

Upvotes: 6

Edward D'Souza
Edward D'Souza

Reputation: 2561

This is a one line, copy-pasteable solution that also closes the file object:

_ = open('data.txt', 'r'); data = _.read(); _.close()

Upvotes: 4

akD
akD

Reputation: 1257

file = open("myfile.txt", "r")
lines = file.readlines()
str = ''                                     #string declaration

for i in range(len(lines)):
    str += lines[i].rstrip('\n') + ' '

print str

Upvotes: 0

PyGuy
PyGuy

Reputation: 59

This works: Change your file to:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

Then:

file = open("file.txt")
line = file.read()
words = line.split()

This creates a list named words that equals:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

That got rid of the "\n". To answer the part about the brackets getting in your way, just do this:

for word in words: # Assuming words is the list above
    print word # Prints each word in file on a different line

Or:

print words[0] + ",", words[1] # Note that the "+" symbol indicates no spaces
#The comma not in parentheses indicates a space

This returns:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

Upvotes: 1

John Galbraith
John Galbraith

Reputation: 387

I don't feel that anyone addressed the [ ] part of your question. When you read each line into your variable, because there were multiple lines before you replaced the \n with '' you ended up creating a list. If you have a variable of x and print it out just by

x

or print(x)

or str(x)

You will see the entire list with the brackets. If you call each element of the (array of sorts)

x[0] then it omits the brackets. If you use the str() function you will see just the data and not the '' either. str(x[0])

Upvotes: 2

Chris Eberle
Chris Eberle

Reputation: 48795

It's hard to tell exactly what you're after, but something like this should get you started:

with open ("data.txt", "r") as myfile:
    data = ' '.join([line.replace('\n', '') for line in myfile.readlines()])

Upvotes: 12

Related Questions