我有一个文件,其中有一行用空格分隔的值
0 380 -222 0 382 -218 45 428 174 . . .
等等。
在新行中拆分每个3值的最快方法是什么?
像这样0 380 -222
0 382 -218
45 428 174
.
.
.
答案 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进行测试