534*_*534 2 python csv python-3.x
我有一个小问题。我正在尝试创建一个使用大型(〜2gb)csv文件(id,integer,integer)的脚本,按第一个整数对它们进行排序,然后将前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])
Run Code Online (Sandbox Code Playgroud)
我的主要想法是尝试:
with open(output_file+'.csv','w') as f:
writer = csv.writer(f, delimiter =',')
for row in range(num_rows):
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
但是然后我收到一个“ _csv.Error:可预期的迭代,不是int”错误。我知道为什么,但是我在努力了解如何获取输出(如打印的结果)以在csv中编写。任何提示或指示,将不胜感激。
如果您的数组是多维列表,则可以直接使用写行,而无需进行迭代
with open(output_file+'.csv','w') as f:
writer = csv.writer(f, delimiter =',')
writer.writerows(sorted_csv_cont)
Run Code Online (Sandbox Code Playgroud)
假设您的清单采用以下格式
[
["R1_C1","R1_C2"],
["R2_C1","R2_C2"]
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11392 次 |
| 最近记录: |