3

我很惊讶,这么简单的事情一直困扰着我。下面是代码

list = []
f = open("log.txt", "rb")  # log.txt file has line separated values, 


for i in f.readlines():
    for value in i.split(" "):
        list.append(value)

print list

输出是

['xx00', '\n', 'xx01in', '\n', 'xx01na', '\n', 'xx01oz', '\n', 'xx01uk', '\n']

我怎样才能摆脱新行,即'\ n'?

4

5 回答 5

5
list = []
f = open("log.txt", "rb")  # log.txt file has line separated values, 


for i in f.readlines():
    for value in i.strip().split(" "):
        list.append(value)

print list

.strip()删除尾随换行符。明确地说,您可以使用.strip('\n')or.strip('\r\n')在某些情况下。

你可以在这里阅读更多.strip()

编辑

做你想做的更好的方法:

with open("log.txt", 'rb') as f:
    mylist = [val for subl in [l.split(' ') for l in f.read().splitlines()] for val in subl]

对于看起来更容易的答案,您可以导入 itertools 并使用链来展平列表列表,例如@ Jon Clements 示例

所以它看起来像这样:

from itertools import chain
with open("log.txt", 'rb') as f:
    mylist = list(chain.from_iterable(l.split(' ') for l in f.read().splitlines()))
于 2012-10-18T09:07:45.523 回答
2
with open("log.txt", "rb") as f:
    mylist = f.read().splitlines()

另外,不要list用作变量名,因为它会掩盖 python type list()

于 2012-10-18T09:08:52.477 回答
2

这样做的正确方法是:

with open('log.txt') as fin:
    for line in fin:
        print line.split()

通过split() 不带参数使用,'\n' 自动不会成为问题(因为 split 或 split(None) 使用不同的拆分规则)。

或者,更简洁地说:

from itertools import chain
with open('log.txt') as fin:
    mylist = list(chain.from_iterable(line.split() for line in fin))
于 2012-10-18T09:17:33.460 回答
2

如果行分隔意味着每行只有一个值,则根本不需要split()

with open('log.txt', 'rb') as f:
    mylist = map(str.strip, f)

在 Python 3map()中,将list().

于 2012-10-18T09:33:08.607 回答
1

如果您有一堆带有空格分隔值的行,并且您只想要一个所有值的列表而不关心换行符的位置(从您的示例中似乎就是这种情况,因为您总是附加到相同的不管你在哪一行列出),然后不要费心循环线路。只需将整个文件作为单个字符串读取split()并不带参数调用;它将在一个或多个空格字符的任何序列上拆分字符串,包括空格和换行符,结果没有任何值包含任何空格:

with open('log.txt', 'rb') as f:
    values = f.read().split()
于 2012-10-18T09:23:18.947 回答