使用.readlines()时摆脱\ n

时间:2013-03-05 20:22:20

标签: python python-2.7 readline

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

值如下所示:

Value1
Value2
Value3
Value4

我的目标是将值放在列表中。当我这样做时,列表如下所示:

['Value1\n', 'Value2\n', ...]

不需要\n

这是我的代码:

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

alist = []

for i in contents:
    alist.append(i)

11 个答案:

答案 0 :(得分:245)

这应该做你想要的(列表中的文件内容,按行,没有\ n)

with open(filename) as f:
    mylist = f.read().splitlines() 

答案 1 :(得分:103)

我会这样做:

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

或:

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

答案 2 :(得分:79)

您可以使用.rstrip('\n') 从字符串末尾删除换行符:

for i in contents:
    alist.append(i.rstrip('\n'))

这使得所有其他空格完好无损。如果你不关心线的起点和终点的空格,那么大重锤就叫.strip()

但是,由于您正在读取文件并将所有内容都拉入内存 ,因此最好使用str.splitlines() method;这会在行分隔符上拆分一个字符串,并返回没有这些分隔符的行列表;在file.read()结果上使用此功能,并且根本不使用file.readlines()

alist = t.read().splitlines()

答案 3 :(得分:10)

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

for i in contents:
    alist.append(i.strip())

但是根据您的使用情况,如果您需要从文件中读取的数据数据很好,最好使用numpy.loadtxt甚至numpy.genfromtxt之类的内容。

答案 4 :(得分:9)

from string import rstrip

with open('bvc.txt') as f:
    alist = map(rstrip, f)

Nota Bene:rstrip()删除空格,也就是说:\f\n\r\t\v\x和空白
但我想你只想把重要人物留在线上。然后,仅仅map(strip, f)更适合,删除标题空格。


如果您确实只想删除NL \n和RF \r符号,请执行以下操作:

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

splitlines()没有传递参数不会保留NL和RF符号(Windows在行的末尾记录NLRF的文件,至少在我的机器上),但保留其他空格,特别是空格和制表符。 / p>

with open('bvc.txt') as f:
    alist = f.read().splitlines(True)

具有相同的效果
with open('bvc.txt') as f:
    alist = f.readlines()

也就是说保留NL和RF

答案 5 :(得分:9)

打开文件后,列表推导可以在一行中完成:

\s

请记得事后关闭文件。

答案 6 :(得分:4)

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

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

看起来应该是这样的:

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中的第一个答案,很抱歉,如果它没有正确的格式化。

答案 7 :(得分:2)

我使用strip函数来摆脱换行符,因为分割线会在4 gb文件中抛出内存错误。

示例代码:

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

答案 8 :(得分:1)

我最近用这个来读取文件中的所有行:

alist = open('maze.txt').read().split()

或者你可以使用它来增加额外的安全性:

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

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

答案 9 :(得分:0)

with open('D:\\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]

答案 10 :(得分:-3)

最简单的方法是编写file.readline()[0:-1] 这将读取除最后一个字符之外的所有内容,即换行符。