如何将文本文件读入字符串变量并删除换行符?


960

我使用以下代码段在python中读取文件:

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

输入文件为:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

当我打印数据时

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

如我所见,数据是list形式形式的。我如何使其成为字符串?而且我怎么删除"\n""["以及"]"从中字符?



7
标题和问题不一致。您还真的想摆脱\ n吗?
朱利安

2
您是否真的要从文件/字符串内容中删除换行符,还是只是对打印输出中的许多元字符感到困惑,并且实际上想保留换行符,但不希望它们显示为“ \ n”?
mnagel '17

10
对于那些来自搜索引擎的人,您可能正在寻找
@xiaoyu

Answers:


1316

您可以使用:

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

66
只是写作有不利之处open("data.txt").read().replace('\n','')吗?
tuomassalo

262
是的,您的版本没有明确关闭文件,该文件将被延迟直到垃圾收集器运行或程序终止。“ with”语句通常封装一些设置/拆卸打开/关闭操作。
2013年

12
感谢您的澄清。因此,看来我的版本适用于小型脚本-但是OTOH最好完全避免使其成为一种习惯。
tuomassalo

10
@tuomassalo在测试/调试过程中是一个巨大的PITA,因为如果您必须提前终止或遇到异常,它不会清理打开的文件句柄。
GoingTharn 2013年

13
不,rstrip('\n')只会从最后一行中replace('\n','')删除换行符,并在所有位置将其删除(实际上是使整个文件变成一行)
sleeplessnerd 2014年

629

使用read(),而不是readline()

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

6
也许可以,但是它不会像OP所希望的那样去除换行符。不过我还是喜欢。
Randall Cook

60
如果返回单个字符串,则删除换行符没有任何意义-OP应该选择一个字符串或从列表中的字符串中删除\ n。
Alex Dupuy 2014年

有效,但不支持Unicode文件。要在python3上支持utf8,请使用额外的参数encoding="utf-8"
FindOutIslamNow

2
我不知道为什么要发布此解决方案,并且它也获得了很多好评。它基本上是相同的一个接受过前一年,它甚至缺少新的生产线剥离部分,使这个甚至更少有帮助..
nnsense

66

您可以在一行中读取文件:

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

请注意,这不会显式关闭文件。

当文件作为垃圾回收的一部分退出时,CPython将关闭文件。

但是其他python实现不会。要编写可移植的代码,最好with显式使用或关闭文件。做空并不总是更好。参见https://stackoverflow.com/a/7396043/362951


32
这是反习惯用法,不建议使用。open应该在with ... as声明中使用。
豪尔赫·雷涛

1
@JC您能解释这个问题吗?这仅仅是风俗习惯的问题,还是with ... as声明带来了什么?
Titou

4
@Titou的问题是open.read()不会关闭文件,因此我们需要with ... asstr.close()如Pedro的回答所示。有关在此处
JBallin,

@JBallin。这种习语显然消除了错误的根源。谢谢 !
Titou

3
这也很糟糕,因为您刚刚被str()内置
函数



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

join()将加入一个字符串列表,而不带参数的rstrip()将从字符串末尾修剪空白,包括换行符。


12

这可以使用read()方法完成:

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

或者由于默认模式本身是“ r”(读取),因此只需使用,

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

9

我已经摆弄了一段时间,并且更喜欢与read结合使用rstrip。如果不使用rstrip("\n"),Python会在字符串末尾添加换行符,这在大多数情况下不是很有用。

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

6

很难确切地知道您要做什么,但是这样的事情应该可以帮助您入门:

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

reduce(lambda x,y:x + y.rstrip('\ n'),['a \ n',“ b \ n”,'c'],“”)凉爽很多:D
sleeplessnerd

3
@邓肯,你有什么建议?
克里斯·埃伯勒

data = ' '.join(line.replace('\n', '') for line in myfile)或MagerValp的版本。
邓肯,

6

我很惊讶没有人提及splitlines()

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

data现在,变量是一个列表,在打印时如下所示:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

请注意,没有换行符(\n)。

那时,这听起来像是要将行打印回控制台,您可以使用for循环来实现:

for line in data:
    print line

4

您还可以删除每行并连接成最终字符串。

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

这也可以解决。


谢谢佩德罗。我只是为了理解而添加了它。
西基里蒂·巴丹

3

您可以将其压缩为两行代码!!!!

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

如果您的文件显示为:

hello how are you?
who are you?
blank blank

python输出

hello how are you? who are you? blank blank

3

这是一个可复制粘贴的单行解决方案,它也关闭了文件对象:

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

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

f.close()


print string

2
string += line应避免使用具有的循环。某些版本的Python可能设法避免此处的O(n ^ 2)行为,但给出的任何其他答案都比这更好。也使您的代码只是一个做的非常缓慢的方式,你没有删除被请求的换行符string = f.read()
邓肯

感谢您纠正我。但是有一件事是我不必删除新行,因为当我测试时,它没有打印出“ \ n”。@Duncan
Hangneox 2011年

2

python3:如果您对方括号语法不陌生,请使用Google“列表注释”。

 with open('data.txt') as f:
     lines = [ line.strip( ) for line in list(f) ]


1

我认为没有人解决您问题的[]部分。当您将每一行读入变量时,由于在用\替换\ n之前有多行,所以最终创建了一个列表。如果您有一个x变量,并通过以下方式将其打印出来

X

或打印(x)

或str(x)

您将看到带有括号的整个列表。如果您调用(排序数组)的每个元素

x [0]则省略括号。如果您使用str()函数,您将只会看到数据,而不会看到“”。str(x [0])


1

也许您可以尝试一下?我在程序中使用它。

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

1

正则表达式也适用:

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

print (l)

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


1

要使用Python删除换行符,您可以使用replace字符串函数。

本示例删除所有3种换行符:

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

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

示例文件为:

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

您可以使用以下重播方案进行尝试:

https://repl.it/repls/AnnualJointHardware

在此处输入图片说明


0

这有效:将文件更改为:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

然后:

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

这将创建一个列表words,该列表等于:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

那摆脱了“ \ n”。要回答括号中的问题,只需执行以下操作:

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

要么:

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

返回:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

1
一次性更改文件可能会起作用,但是如果您有数百个文件,那么这不是一个可行的解决方案。
Craicerjack

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

此代码将帮助您阅读第一行,然后使用list and split选项可以转换以空格分隔的第一行单词以存储在列表中。

比起您可以轻松访问任何单词,甚至将其存储在字符串中而言。

您也可以使用for循环执行相同的操作。


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

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

print str

-1

尝试以下方法:

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

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

注意:它不会删除\n。仅用于查看文本,好像没有\n

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.