我的CSV文件仅包含第一列中的数据
我想使用python将每4行转换为另一个空CSV文件,例如,第1行转换为第4行;然后第5行到第8行转换到第二行,...等,最后我们可以在CSV文件中得到一个5 * 4矩阵。
如何编写脚本来执行此操作?请给我任何提示和建议,谢谢。
我在Windows 8.1 x64下使用python 2.7.4。
更新#1
我使用以下代码提供的代码,
import sys, os
os.chdir('C:\Users\Heinz\Desktop')
print os.getcwd()
from itertools import islice
with open("test_csv.csv") as in_f, open("Output.csv", "w") as out_file:
for line in ([i.rstrip()] + map(str.rstrip, islice(in_f, 3)) for i in in_f):
out_file.write("\t".join(line) + "\n")
输入的CSV文件是
结果是,
这不是我想要的。
答案 0 :(得分:1)
您可以像这样使用列表理解
data = range(20)
print data
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
print[data[i:i + 4] for i in xrange(0, len(data), 4)]
# [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18,19]]
您可能希望使用4
。
56
由于您计划从文件中读取数据,因此您可能希望执行此类操作
from itertools import islice
with open("Input.txt") as in_file:
print [[int(line)] + map(int, islice(in_file, 3)) for line in in_file]
修改根据更新的问题,
from itertools import islice
with open("Input.txt") as in_f, open("Output.txt", "w") as out_file:
for line in ([i.rstrip()] + map(str.rstrip, islice(in_f, 3)) for i in in_f):
out_file.write("\t".join(line) + "\n")
修改:由于您要查找以逗号分隔的值,因此可以使用,
加入这些行,就像这样
out_file.write(",".join(line) + "\n")
答案 1 :(得分:0)
你可以像这样使用List comprehension和double-loop。
>>> M = 3
>>> N = 5
>>> a = range(M * N)
>>> o = [[a[i * N + j] for j in xrange(N)] for i in xrange(M)]
>>> print o
[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]]