Python - 将某些行写入新文件的CSV模块

时间:2015-11-05 16:42:17

标签: python csv python-3.x

我有一个小问题。我试图创建一个脚本,它接受大(~2gb)csv文件(id,整数,整数),按第一个整数对它们进行排序,然后将前x行写入新文件(由用户)。

我能够根据需要使sort函数工作,并且提取前X行也可以工作但我无法解决如何将此输出写入csv的问题。 为了检查它是否正常工作,我已经包含了一个打印功能,这一切似乎都很好。

我觉得我在csv模块中错过了一个非常基本的概念,但我无法弄清楚它是什么!

import csv
import operator

def csv_to_list(csv_file, delimiter=','):

    with open(csv_file, 'r') as csv_con:
        reader = csv.reader(csv_con, delimiter=delimiter)
        return list(reader)

def sort_by_column(csv_cont, col, reverse=True):

    header = csv_cont[1]
    body = csv_cont[1:]
    if isinstance(col, str):  
        col_index = header.index(col)
    else:
        col_index = col
    body = sorted(body, 
           key=operator.itemgetter(col_index), 
           reverse=reverse)
    #body.insert(0, header)
    return body

def print_csv(csv_content):
    for row in csv_content:
        row = [str(e) for e in row]
        print('\t'.join(row))

def write_csv(dest, csv_cont):
    with open(dest, 'w') as out_file:
        writer = csv.writer(out_file, delimiter=',')
        for row in csv_cont:
            writer.writerow(row)

csv_cont = csv_to_list(input_hep.csv)
row_count = sum(1 for row in csv_cont)
num_rows = int(input("Skim size?: "))
output_file = input("Output: ")

csv_sorted = sort_by_column(csv_cont, 1)
for row in range(num_rows):
    print(csv_sorted[row])

我的主要想法是尝试:

with open(output_file+'.csv','w') as f:
    writer = csv.writer(f, delimiter =',')
    for row in range(num_rows):
        writer.writerow(row)

但后来我得到了一个" _csv.Error:迭代预期,而不是int"错误。我明白了,但是我很难理解如何在csv中写出输出(因为它是打印的)。 任何提示或指示将不胜感激。

2 个答案:

答案 0 :(得分:5)

如果您的数组是多维列表,则可以直接使用writerows而无需迭代

with open(output_file+'.csv','w') as f:
    writer = csv.writer(f, delimiter =',')
    writer.writerows(sorted_csv_cont)

假设您的列表采用以下格式

[
  ["R1_C1","R1_C2"],
  ["R2_C1","R2_C2"]
]

答案 1 :(得分:0)

我只是写这样的csv

hs = open(filepath,"w+")
for mline in rows:
    hs.write(",".join(mline)+"\r")

但我将csv加载为多维列表,每行代表csv中的一行,而那些列表中的项目代表行中的项目