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

kli*_*ijo 875 python

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

with open ("data.txt", "r") as myfile:
    data=myfile.readlines()
Run Code Online (Sandbox Code Playgroud)

输入文件是:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE
Run Code Online (Sandbox Code Playgroud)

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

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
Run Code Online (Sandbox Code Playgroud)

我看到数据的list形式.我如何使它成为字符串?而且我怎么删除"\n","["以及"]"从中字符?

sle*_*erd 1189

你可以使用:

with open('data.txt', 'r') as file:
    data = file.read().replace('\n', '')
Run Code Online (Sandbox Code Playgroud)

  • 是的,您的版本没有显式关闭该文件,然后将延迟该文件,直到垃圾收集器运行或程序终止.'with'语句通常封装一些设置/拆卸打开/关闭操作. (240认同)
  • 只写`open("data.txt")是否有缺点.阅读().替换('\n','')`而不是? (54认同)
  • 谢谢你的澄清.因此,似乎我的版本可能适用于小脚本 - 但最好完全避免使用OTOH,以免使其成为一种习惯. (11认同)
  • 不,`rstrip('\n')`只会删除最后一行的换行符,`replace('\n','')`将其删除到处(基本上将整个文件放到一行) (11认同)
  • @tuomassalo它在测试/调试过程中是一个巨大的PITA,因为如果你必须提前终止或者它遇到异常,它将不会清理打开的文件句柄. (8认同)
  • 你不需要明确地陈述`"r"`,因为它是`mode`选项的默认值(但它可能只是为了澄清). (2认同)
  • -1因为`replace('\n')`将改变输入数据的格式.小玉的答案更准确.(`\n`和`[]`只是因为使用`readline()`而出现.) (2认同)
  • @sleeplessnerd:确实我的评论括号措辞不好,但这正是我的观点:OP并不*真的想要摆脱它们.另见Alex Dupuy对xiaoyu答案的评论. (2认同)

小智 584

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

with open('data.txt', 'r') as myfile:
  data = myfile.read()
Run Code Online (Sandbox Code Playgroud)

  • 如果要返回单个字符串,则删除换行没有任何意义 - OP应该从列表中的字符串中选择一个字符串或从中删除\n. (58认同)
  • 或许,但它并没有像OP那样剥离换行.不过我还是喜欢它. (6认同)

Naf*_*mad 63

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

str = open('very_Important.txt', 'r').read()
Run Code Online (Sandbox Code Playgroud)

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

CPython将在文件作为垃圾收集的一部分退出时关闭该文件.

但其他python实现不会.要编写可移植代码,最好with明确使用或关闭文件.简短并不总是更好.请参阅/sf/answers/517723041/

  • 这是反惯用的,不推荐.`open`应该在`with ... as`语句中使用. (29认同)
  • @Titou问题是open.read()没有关闭文件所以我们要么需要`with ... as`或`str.close()`,如Pedro的回答所示.更多关于关闭文件的重要性[这里](http://stackoverflow.com/questions/7395542/is-explicitly-closing-files-important) (4认同)
  • @JC你能解释一下这个问题吗?这只是一个习惯问题还是“with ... as”语句带来了什么? (2认同)
  • 这也很糟糕,因为您刚刚从内置函数中遮盖了`str()`。 (2认同)

Ped*_*ito 49

简单的方法:

with open('t.txt') as f:
  s = " ".join([x.strip() for x in f]) 
Run Code Online (Sandbox Code Playgroud)

使用__CODE__(推荐):

with open('t.txt') as f:
  s = " ".join([x.strip() for x in f]) 
Run Code Online (Sandbox Code Playgroud)

注:无需关闭文件,__CODE__自动的.


Jon*_*man 34

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

from pathlib import Path
txt = Path('data.txt').read_text()
Run Code Online (Sandbox Code Playgroud)

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

txt = txt.replace('\n', '')
Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止最优雅的解决方案。我更喜欢像 R 的 read_file 这样的单行解决方案 (6认同)

Mag*_*alp 30

with open("data.txt") as myfile:
    data="".join(line.rstrip() for line in myfile)
Run Code Online (Sandbox Code Playgroud)

join()将连接一个字符串列表,而没有参数的rstrip()将从字符串末尾修剪空格,包括换行符.


Loo*_*hie 12

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

text_as_string = open('Your_Text_File.txt', 'r').read()
Run Code Online (Sandbox Code Playgroud)

或者作为默认模式本身是'r'(读取)所以简单地使用,

text_as_string = open('Your_Text_File.txt').read()
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会使文件无限期地保持打开状态。 (2认同)

Jul*_*ian 11

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

with open ("data.txt", "r") as myfile:
    data = myfile.read().splitlines()
Run Code Online (Sandbox Code Playgroud)

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

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']
Run Code Online (Sandbox Code Playgroud)

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

在这一点上,听起来您想将这些行打印回控制台,您可以使用 for 循环来实现:

for line in data:
    print(line)
Run Code Online (Sandbox Code Playgroud)


My *_*Car 11

这里有四个代码供您选择一个:

with open("my_text_file.txt", "r") as file:
    data = file.read().replace("\n", "")
Run Code Online (Sandbox Code Playgroud)

或者

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

或者

with open("my_text_file.txt", "r") as file:
    data = "".join(file.read().splitlines())
Run Code Online (Sandbox Code Playgroud)

或者

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


whi*_*win 9

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

with open("myfile.txt") as f:
    file_content = f.read().rstrip("\n")
    print file_content
Run Code Online (Sandbox Code Playgroud)


Chr*_*rle 6

很难确切地说出你所追求的是什么,但这样的事情应该让你开始:

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

  • @Duncan你会建议什么? (3认同)

Sai*_*dam 6

您还可以剥离每一行并连接成最终的字符串。

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

这也能解决问题。


Mic*_*ith 6

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

content = open('filepath', 'r').read().replace('\n', ' ')
print(content)
Run Code Online (Sandbox Code Playgroud)

如果您的文件内容如下:

content = open('filepath', 'r').read().replace('\n', ' ')
print(content)
Run Code Online (Sandbox Code Playgroud)

Python输出

hello how are you?
who are you?
blank blank
Run Code Online (Sandbox Code Playgroud)


ger*_*rdw 5

Python 3:有关方括号语法,请参阅列表推导式。

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