拆分文本文件 - Python中的列到行

时间:2014-07-29 11:14:30

标签: python

我有一个txt文件,如下所示:

X Y Z I
1 1 1 10
2 2 2 20
3 3 3 30
4 4 4 40
5 5 5 50
6 6 6 60
7 7 7 70
8 8 8 80
9 9 9 90

我想将第4列拆分为3行并将其导出到txt文件。

10 20 30
40 50 60
70 80 90

这只是一个例子。在我的目标中,我必须将具有675311值的列拆分为具有41个值的16471行。因此,列“I”中的前41个值将是第一行。

3 个答案:

答案 0 :(得分:0)

with open ( 'in.txt' , 'r') as f:
    f.next() '# skip header
    l = [x.split()[-1] for x in f]
    print [l[x:x+3] for x in xrange(0, len(l),3)]
[['10', '20', '30'], ['40', '50', '60'], ['70', '80', '90']]

答案 1 :(得分:0)

如果您使用numpy,这是微不足道的,可能更灵活:

编辑添加了参数,用于选择要选择的列以及输出表将包含的列数。您可以将其更改为适合您想要输出的任何形状。

import numpy as np

datacolumn = 3
outputcolumns = 3
data = np.genfromtxt('path/to/csvfile',skip_header=True)
column = data[:,datacolumn]
reshaped = column.reshape((len(column)/outputcolumns,outputcolumns))
np.savetxt('path/to/newfile',reshaped)

编辑将代码中的注释与可读性分开。以下是每行的内容:

# Parse CSV file with header
# Extract 4th column
# Reshape column into new matrix
# Save matrix to text file

答案 2 :(得分:0)

我做的是我列出了你想要写入文本文件的所有数字,然后在另一个打开输出文本文件的for循环中,我循环遍历该列表(使用指标因为每三个你一个想要一条新线)。然后我有一个局部变量,比我称为j。我用它来检查i + 1是否是3的倍数(因为我从0开始每三次迭代+ 1将是3的倍数)。我写了一个新的字符,继续我的路。如果它不是3的倍数,我会写一个空格并继续前进。

nums = []
with open ('input.txt' , 'r') as f:
    for line in f:
        s = line.split(' ')
        num = s[3]
        nums.append(num)
with open('output.txt', 'w') as f:
    for i in range(0, len(nums)):
        num = nums[i].strip('\n')
        f.write(num)
        j = i + 1
        if j%3 == 0:
            f.write('\n')
        else:
            f.write(' ')