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

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


输入文件为:

 LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
 


,当我打印数据时,我得到

 ['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
  

我看到的数据是list格式。我如何使其成为字符串?以及如何从其中删除"\n""[""]"字符?

评论

相关:如何使用Python将文件逐行读取到列表中

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

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

#1 楼

您可以使用:

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


评论


仅编写open(“ data.txt”)。read()。replace('\ n','')有不利之处吗?

– tuomassalo
13-10-18在10:43

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

–sleeplessnerd
13-10-18在13:38

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

– tuomassalo
13-10-20在17:18

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

– GoingTharn
13-10-24在20:41

不,rstrip('\ n')只会从最后一行删除换行符,replace('\ n','')会在所有地方删除换行符(基本上使整个文件变成一行)

–sleeplessnerd
2014年7月6日在8:00

#2 楼

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

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


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

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

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

评论


这是反习惯用法,不建议使用。 open应该在with ... as语句中使用。

–乔治·雷涛(Jorge Leitao)
17年1月9日在10:27

@ J.C您能解释这个问题吗?这仅仅是一个风俗问题还是with ... as语句带来了什么?

–头投
17年5月5日在12:08

@Titou的问题是open.read()不会关闭文件,因此我们需要使用... as或str.close(),如Pedro的答案所示。有关在此处关闭文件的重要性的更多信息

– JBallin
17年5月18日在21:01



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

–头投
17年5月19日在8:15

这也很糟糕,因为您刚刚从内置函数中隐藏了str()

– Chris_Rands
19年8月13日在14:52

#3 楼

在Python 3.5或更高版本中,可以使用pathlib将文本文件的内容复制到一个变量中,并在一行中关闭该文件:

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


,然后可以使用str.replace删除换行符:

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


评论


到目前为止,这是最优雅的解决方案。我更喜欢像R的read_file这样的oneliner解决方案

– Gang Su
9月27日16:17

#4 楼

要将所有行连接到字符串中并删除新行,通常使用:
with open('t.txt') as f:
  s = " ".join([l.rstrip() for l in f]) 


评论


它在我的代码中给出了UnicodeDecodeError参见此stackoverflow.com/q/18649512/9339242

– Arayan Singh
18/12/12在13:59

您可能需要指定字符编码。

– Pedro Lobito
19年2月11日在11:39

#5 楼

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


join()将连接字符串列表,而不带参数的rstrip()将从字符串末尾删除空白,包括换行符。

#6 楼

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

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


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

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


#7 楼

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



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


#8 楼

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

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


现在,变量data的列表如下:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']


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

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

for line in data:
    print line


#9 楼

很难确切地说出您要做什么,但是类似这样的东西应该可以帮助您入门:

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
2011年12月3日,18:26

@邓肯,你有什么建议?

–克里斯·埃伯勒(Chris Eberle)
2011年12月3日20:20在

data =''.join(myfile中一行的line.replace('\ n',``))或MagerValp的版本。

–邓肯
2011年12月3日在21:12



#10 楼

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

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


这样也可以。

评论


谢谢佩德罗。我只是为了理解而添加了它。

–西基里蒂·巴丹(Sai Kiriti Badam)
19年9月2日,16:32

数据=数据+ line.strip();可以简化为data + = line.strip();

– Pedro Lobito
10月5日,下午2:31

#11 楼

python3:如果您对方括号语法不熟悉,则使用Google“列表理解”。

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


评论


非常Pythonic,虽然对大型文件还没有进行测试,但对我来说效果很好。谢谢!

–stux
7月9日17:41

我将撤回我的投票,因为strip还会删除空格,这可能不是您想要的行为。但是,我仍然认为对此进行修改是好的。

–stux
7月9日19:37

#12 楼

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

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


#13 楼

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

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


#14 楼

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

f.close()


print string


评论


应该避免使用带有字符串+ =的循环。某些版本的Python可能设法避免此处的O(n ^ 2)行为,但给出的任何其他答案都比这更好。另外,您没有删除请求的换行符,因此您的代码只是执行string = f.read()的一种非常慢的方式

–邓肯
2011年12月3日17:41

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

– hungneox
2011年12月3日,18:10

#15 楼

您尝试过吗?

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

print(y)


评论


错了如果要这样做,则需要y = open(x,'r')。read()。

–卡塔斯航行
18年2月24日在8:27

#16 楼

要使用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



#17 楼

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

x

或print(x)

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

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

#18 楼

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

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


#19 楼

正则表达式也适用:

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' ]


#20 楼

可行:
将文件更改为:

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


评论


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

–千斤顶
17 Mar 3 '17 at 14:57

#21 楼

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


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

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

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

#22 楼

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

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

print str


#23 楼

请尝试以下操作:

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

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


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