Python 使用.readlines()时清除\n

Python 使用.readlines()时清除\n,python,python-2.7,readline,Python,Python 2.7,Readline,我有一个包含值的.txt文件 这些值如下所示: Value1 价值2 价值3 价值4 我的目标是将这些值放在一个列表中。当我这样做时,列表如下所示: with open("filename.txt", "r+") as f: contents = [x.strip() for x in f.readlines()] ['Value1\n','Value2\n',…] 不需要\n 这是我的密码: t = open('filename.txt', 'r+w') contents = t.

我有一个包含值的.txt文件

这些值如下所示:

Value1
价值2
价值3
价值4
我的目标是将这些值放在一个列表中。当我这样做时,列表如下所示:

with open("filename.txt", "r+") as f:
    contents = [x.strip() for x in f.readlines()]
['Value1\n','Value2\n',…]

不需要
\n

这是我的密码:

t = open('filename.txt', 'r+w')
contents = t.readline()

alist = []

for i in contents:
    alist.append(i)

对于列表中的每个字符串,请使用
.strip()
删除字符串开头或结尾的空白:

for i in contents:
    alist.append(i.strip())
for i in contents:
    alist.append(i.rstrip('\n'))
但是,根据您的使用情况,如果您需要从文件中读取的数据的良好数组,则最好使用
numpy.loadtxt
或甚至
numpy.genfromtxt

您可以使用来仅删除字符串末尾的换行:

for i in contents:
    alist.append(i.strip())
for i in contents:
    alist.append(i.rstrip('\n'))
这将保留所有其他空白。如果你不在乎行首和行尾的空格,那么就称之为大重锤

但是,由于您正在读取文件,并且正在将所有内容都拉入内存,因此最好使用;这会在行分隔符上拆分一个字符串,并返回不带这些分隔符的行列表;在
file.read()
结果中使用此选项,并且完全不要使用
file.readlines()

alist = t.read().splitlines()
我会这样做:

alist = [line.rstrip() for line in open('filename.txt')]
或:

注意:
rstrip()
删除空格,也就是说:
\f
\n
\r
\t
\v
\x
和blank

但我想你只想把重要的人物保留在台词中。然后,仅仅
map(strip,f)
将更适合,同时删除标题空白


如果确实要仅消除NL
\n
和RF
\r
符号,请执行以下操作:

with open('bvc.txt') as f:
    alist = f.read().splitlines()
未传递参数的splitlines()不会保留NL和RF符号(Windows会在行尾记录文件,至少在我的计算机上是这样),但会保留其他空白,尤其是空格和制表符

具有与相同的效果

with open('bvc.txt') as f:
    alist = f.readlines()

也就是说NL和RF被保留

这应该做您想要做的事情(列表中的文件内容,按行,不带\n)


我最近使用它读取文件中的所有行:

alist = open('maze.txt').read().split()
或者你可以用这个来增加一点额外的安全性:

with f as open('maze.txt'):
    alist = f.read().split()

它不适用于单行中文本之间的空格,但您的示例文件可能没有分隔值的空格。这是一个简单的解决方案,它返回准确的值列表,并且不会为每一个空行添加空字符串:
'
,例如文件末尾的换行符。

最简单的方法是编写
file.readline()[0:-1]
with open('D:\\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]

这将读取除最后一个字符(换行符)以外的所有内容。

我也遇到了同样的问题,我发现下面的解决方案非常有效。我希望它能帮助你或其他想做同样事情的人

首先,我将从一个“with”语句开始,因为它确保文件的正确打开/关闭

with open('D:\\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]
它应该是这样的:

with open("filename.txt", "r+") as f:
    contents = [x.strip() for x in f.readlines()]
如果要将这些字符串(目录列表中的每个项目都是字符串)转换为整数或浮点值,可以执行以下操作:

contents = [float(contents[i]) for i in range(len(contents))]
如果要转换为整数,请使用
int
而不是
float


这是我在SO中的第一个答案,如果格式不正确,非常抱歉。

打开文件后,列表理解可以在一行中完成此操作:

fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()

请记住以后关闭文件。

我使用strip函数删除换行符,因为拆分行会在4GB文件上抛出内存错误

示例代码:

with open('C:\\aapl.csv','r') as apple:
    for apps in apple.readlines():
        print(apps.strip())

f.read().splitlines()
我想效率会更高。对于int或float转换,
map(int,f.read().splitlines())
可能更好。像这样使用.readlines(),您可以有效地在整个文件上迭代两次,同时还可以将整个文件一次保存在内存中。这可以剥离的不仅仅是
\n
。后面的空白(空格、制表符、CR、LF等)永远不可取,以我的经验。二十多年来,我处理过的任何数据或计算机语言都不需要尾随空格。因此,是的,它剥离了\n。很有可能,你不会错过它。一种可能会造成伤害的情况是,正确剥离一个以制表符分隔的值文件,其中一些行在其最右边的单元格中有多个空值。如果在…@duhaime上拆分,则这些行的长度将比其他行短。您正在切换上下文。如果有人问,“我如何读取包含CR分隔行和tab分隔字段的文件?”我肯定会推荐使用python的CSV模块。我不会给出适用于包含CR分隔行数据的纯文本文件的提示。因此,制表符分隔的值是一种不好的情况,如果这样说,这个答案永远不会是我的建议。@hughdbrown amen,只是想将此标记为gronostaj评论的潜在示例,因为这是第一个用readlines剥离的Google结果。你的观点是明白的!最后一个字符并不总是换行符。可以创建一个不以换行符结尾的文本文件(尽管大多数编辑器都包含一个),这就是换行符。新线?这个问题很明显是关于一个有多行的文件,我们想从每行中删除换行符。mylist=[i for i in mylist if i!='']从@bfreerix建议的url被破坏了。这里是archive.org copy@Chiramisu,该链接似乎指向了一些无关/非故意的地方。@AMC你是对的,我删除了我的链接,因为Paolo Melchiorre已经发布了一个指向存档版本的更好的链接。小文件的最佳解决方案。使用Matrix[I][j]=map(int,sys.stdin.readline().split())通常你不想先阅读所有行,存储在缓冲区中,然后剥离换行符/
splitlines()
——这是不必要的