Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSV将一列中的数据转换为行_Python_Csv_Matrix_Transpose - Fatal编程技术网

Python CSV将一列中的数据转换为行

Python CSV将一列中的数据转换为行,python,csv,matrix,transpose,Python,Csv,Matrix,Transpose,我有一个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.g

我有一个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文件为

结果是,


这不是我想要的。

你可以像这样使用列表理解

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]]
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]
        out_file.write(",".join(line) + "\n")
您可能希望使用
56
,而不是
4

由于您计划从文件中读取,因此可能需要执行以下操作

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]]
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]
        out_file.write(",".join(line) + "\n")
根据更新的问题编辑

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")
编辑:由于要查找逗号分隔的值,因此可以使用
将行连接起来,如下所示

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]]
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]
        out_file.write(",".join(line) + "\n")

您可以像这样使用列表理解和双循环

>>> 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]]

我可以转置数据并得到CSV文件中包含的矩阵形式数据吗?@Heinz您的预期输出是什么?@Heinz您可以将数据简化为一个小数据集并生成预期输出吗?谢谢您的提醒,我已经编辑了我的帖子。@Heinz我想您需要
输出文件。写入(“,”.join(line)+“\n”)