如何将一行txt文件拆分为每行3个值

时间:2015-11-04 09:05:08

标签: python

我有一个文件,其中有一行用空格分隔的值

0 380 -222 0 382 -218 45 428 174 . . .

等等。

在新行中拆分每个3值的最快方法是什么?

像这样

0 380 -222
0 382 -218
45 428 174
.
.
.

5 个答案:

答案 0 :(得分:3)

您最初需要根据空格拆分您拥有的字符串。然后,您可以选择多种方法来组合该列表的元素并打印它们。

要将字符串拆分为列表,通常使用split()

# test string
s = "0 380 -222 0 382 -218 45 428 174"
# splitting based on the spaces
l = s.split()

将它们组合在一起的选项之一是使用zip记下您所采用的切片,以便定义所需的元素。这将创建元组,它将包含您的元素。

然后,您可以在for循环中解压缩这些元组并打印或执行您想要的任何其他内容:

for a,b,c in zip(l[0::3], l[1::3], l[2::3]): 
    print a, b, c

反过来打印:

0 380 -222
0 382 -218
45 428 174

在@ boardrider的评论之后,我会注意到,如果列表长度不能被3整除,您可以使用izip_longest zip_longest Py3 1}})来自itertools(并在需要时提供选项填充值)以获取字符串s中的所有可能值:

from itertools import izip_longest

s = "0 380 -222 0 382 -218 45 428 293 9298 8192 919 919"
l = s.split()

for a,b,c in zip_longest(l[0::3], l[1::3], l[2::3]): 
    print a, b, c

现在产生:

0 380 -222
0 382 -218
45 428 293
9298 8192 919
919 None None

答案 1 :(得分:2)

您也可以使用xrange -

l='0 380 -222 0 382 -218 45 428 174'.split(' ')
result = [l[i:i+3] for i in xrange(0, len(l), 3)]
for three in result:
    print ' '.join(three)

打印 -

0 380 -222
0 382 -218
45 428 174

答案 2 :(得分:1)

您可以使用通用分组功能:

def grouper(n, iterable):
    "s -> (s0,s1,...sn-1), (sn,sn+1,...s2n-1), (s2n,s2n+1,...s3n-1), ..."
    return zip(*[iter(iterable)]*n)

line = "0 380 -222 0 382 -218 45 428 174"

for group in grouper(3, line.split()):
    print(' '.join(group))

答案 3 :(得分:0)

这就是你要做的:

num_columns = 3
with open(file_name) as fd:
    for line in fd:
        for count, number in enumerate(line.strip().split(), 1):
            print '{:4}'.format(number),
            if count % num_columns == 0:
                print

答案 4 :(得分:0)

以下内容将读取一个名为input.txt的输入文件,其中包含以空格分隔的条目,并创建一个名为output.txt的输出文件,其中每行分割3个条目:

from itertools import izip, islice

with open('input.txt', 'r') as f_input, open('output.txt', 'w') as f_output:
    values = []
    for line in f_input:
        values.extend(line.split())

    ivalues = iter(values)

    for triple in iter(lambda: list(islice(ivalues, 3)), []):
        f_output.write(' '.join(triple) + '\n')

为您提供如下输出文件:

0 380 -222
0 382 -218
45 428 174

使用Python 2.7.9进行测试