我有一个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个值将是第一行。
答案 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(' ')