with open ("data.txt", "r") as myfile:
data=myfile.readlines()
输入文件为:
LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
,当我打印数据时,我得到
['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
pre >
我看到的数据是list
格式。我如何使其成为字符串?以及如何从其中删除"\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 楼
我已经摆弄了一段时间,并且更喜欢将read
与rstrip
结合使用。如果没有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
评论
相关:如何使用Python将文件逐行读取到列表中标题和问题不一致。您还真的想摆脱\ n吗?
您是否真的要从文件/字符串内容中删除换行符,还是只是对打印输出中的许多元字符感到困惑,并且实际上想保留换行符,但不希望换行符显示为“ \ n”?