我有一个。txt文件的值。
这些值如下所示:
Value1 Value2 Value3 Value4
我的目标是将值放在一个列表中。当我这样做时,列表看起来像这样:
['Value1\n', 'Value2\n', ...]
\n不需要。
\n
这是我的代码:
t = open('filename.txt') contents = t.readlines()
对于列表中的每个字符串,使用.strip()来移除字符串开头或结尾的空白:
.strip()
for i in contents: alist.append(i.strip())
但根据你的用例,如果你需要从文件中读取的数据的一个漂亮数组,你可能最好使用numpy.loadtxt或甚至numpy.genfromtxt之类的东西。
numpy.loadtxt
numpy.genfromtxt
你可以使用.rstrip('\n')到只有删除字符串末尾的换行符:
.rstrip('\n')
for i in contents: alist.append(i.rstrip('\n'))
这将保留所有其他空白。如果你不关心行首和行尾的空格,那么这个大重锤被称为.strip()。
然而,由于你正在从文件中读取并将所有内容都拉入内存无论如何,最好使用str.splitlines()方法;这将在行分隔符上分割一个字符串,并返回一个没有这些分隔符的行列表;在file.read()结果上使用这个,而根本不使用file.readlines():
str.splitlines()
file.read()
file.readlines()
alist = t.read().splitlines()
我会这样做:
alist = [line.rstrip() for line in open('filename.txt')]
或者:
with open('filename.txt') as f: alist = [line.rstrip() for line in f]
from string import rstrip with open('bvc.txt') as f: alist = map(rstrip, f)
注意:rstrip()去掉了空格,也就是说:\f, \n, \r, \t, \v, \x和空白, 但我想你只对行中重要的字符感兴趣。然后,仅仅map(strip, f)将更好地适合,同时删除标题空白
rstrip()
\f
\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文件,至少在我的机器上是这样),但保留其他空白,特别是空格和制表符。
.
with open('bvc.txt') as f: alist = f.read().splitlines(True)
效果与
with open('bvc.txt') as f: alist = f.readlines()
也就是说NL和RF被保留
这应该是你想要的(文件内容在一个列表中,按行,不\n)
with open(filename) as f: mylist = f.read().splitlines()
我最近用它来读取文件中的所有行:
alist = open('maze.txt').read().split()
或者你可以用这个来增加一点额外的安全:
with f as open('maze.txt'): alist = f.read().split()
它不能在单行文本之间使用空格,但看起来您的示例文件可能没有空格分隔值。这是一个简单的解决方案,它返回一个精确的值列表,并且不会为每一个空行(例如文件末尾的换行符)添加一个空字符串:''。
''
with open('D:\\file.txt', 'r') as f1: lines = f1.readlines() lines = [s[:-1] for s in lines]
file.readline()[0:-1]
我有同样的问题,我发现下面的解决方案是非常有效的。我希望它能帮助你或其他想做同样事情的人。
首先,我将以“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。
int
float
这是我在SO里的第一个答案,如果格式不对,很抱歉。
打开文件后,列表理解可以在一行中完成:
fh=open('filename') newlist = [line.rstrip() for line in fh.readlines()] fh.close()
记得之后关闭你的文件。
我使用strip函数来消除换行符,因为分割行会在4 gb的文件上抛出内存错误。
示例代码:
with open('C:\\aapl.csv','r') as apple: for apps in apple.readlines(): print(apps.strip())