2017-03-06 98 views
1

test3.csv包含一列有33个数字的列。我想将这一列重新塑造成11行3列。然后,我想将新的ascii文件保存为附加图像的行和列。将带有一列的CSV文件转换为带有多列的ASCII文件

首先尝试:

import csv 
f = open('test3.csv') 
csv_f = csv.reader(f) 
for row in csv_f: 
    print row /* The result is 

结果是:

['0.000016'] ['0.000045'] ['0.000062'] ['0.000063'] ['0.000063'] ['0.000063']... **[' ']** means string? 

第二个尝试:

f = open('test3.csv') 
csv_f = csv.reader(f) 
for row in csv_f: 
    print row[0] 

结果是:

0.000016 0.000045 0.000062 0.000063 0.000063 0.000063 ...I think they are number. 

第三次尝试:

import csv 
import numpy as np 
f = open('test3.csv') 
csv_f = csv.reader(f) 
a1 = [] 
for row in csv_f: 
    a1.append(row[0]) 
print a1 

结果是:

['0.000016', '0.000045', '0.000062', '0.000063', '0.000063', '0.000063',...]. 

其实我想这个结果像ASCII文件:

Image

回答

0

下面是一些代码,会做你需要的东西:

代码:

import csv 

# read each line of the input csv 
with open('file3') as f: 
    csv_f = csv.reader(f) 

    # convert the first element of each line to a formated float 
    numbers = ['%.6f' % float(row[0]) for row in csv_f] 

# make sure the length is divisible by 3 
numbers += [''] * (-len(numbers) % 3) 

# reorder to by 3 
numbers = [(numbers[i], numbers[i+1], numbers[i+2]) 
      for i in range(0, len(numbers), 3)] 

# print each line 
for line in numbers: 
    print(' '.join(line)) 

测试数据:

0.000016 
0.000045 
0.000062 
0.000063 
0.000063 
0.000063 
0.000079 
0.000078 
0.000045 
0.000062 
0.000062 
0.000062 
0.000062 
0.000062 
0.000062 
0.000077 
0.000073 
0.000062 
0.000062 
0.000045 
0.000063 

结果:

0.000016 0.000045 0.000062 
0.000063 0.000063 0.000063 
0.000079 0.000078 0.000045 
0.000062 0.000062 0.000062 
0.000062 0.000062 0.000062 
0.000077 0.000073 0.000062 
0.000062 0.000045 0.000063 
0

我利用this great answer

from itertools import izip_longest 

def grouper(iterable, n, fillvalue=None): 
    args = [iter(iterable)] * n 
    return izip_longest(*args, fillvalue=fillvalue) 

with open('data.txt', 'r') as f: 
    for group in grouper(f, 3, ''): 
     print ' '.join([x.strip() for x in group]) 
相关问题