2014-09-18 3 views
0

У меня действительно огромные файлы CSV. Есть около 1700 столбцов и 40000 строк, как показано ниже:разделение CSV-файла по столбцам

x,y,z,x1,x2,x3,x4,x5,x6,x7,x8,x9,...(about 1700 more)...,x1700 
0,0,0,a1,a2,a3,a4,a5,a6,a7,a8,a9,...(about 1700 more)...,a1700 
1,1,1,b1,b2,b3,b4,b5,b6,b7,b8,b9,...(about 1700 more)...,b1700 
// (about 40000 more rows below) 

Мне нужно разделить этот CSV файл на несколько файлов, которые содержат меньшее количество столбцов, как:

# file1.csv 
x,y,z 
0,0,0 
1,1,1 
... (about 40000 more rows below) 

# file2.csv 
x1,x2,x3,x4,x5,x6,x7,x8,x9,...(about 1000 more)...,x1000 
a1,a2,a3,a4,a5,a6,a7,a8,a9,...(about 1000 more)...,a1000 
b1,b2,b3,b4,b5,b6,b7,b8,b9,...(about 1000 more)...,b1700 
// (about 40000 more rows below) 

#file3.csv 
x1001,x1002,x1003,x1004,x1005,...(about 700 more)...,x1700 
a1001,a1002,a1003,a1004,a1005,...(about 700 more)...,a1700 
b1001,b1002,b1003,b1004,b1005,...(about 700 more)...,b1700 
// (about 40000 more rows below) 

Есть ли программа или библиотека делая это?

Я искал его для поиска, но программы, которые я нашел, разбивали файл по строкам не по столбцам.

Или на каком языке я могу использовать это для эффективного использования?

я могу использовать R, скрипт, Python, C/C++, Java

ответ

0

Используйте небольшой питон скрипт, как:

fin = 'file_in.csv' 
fout1 = 'file_out1.csv' 
fout1_fd = open(fout1,'w') 
... 
lines = [] 

with open(fin) as fin_fd: 
    lines = fin_fd.read().split('\n') 

for l in lines: 
    l_arr = l.split(',') 
    fout1_fd.write(','.join(l_arr[0:3]))   
    fout1_fd.write('\n') 
    ... 

... 
fout1_fd.close() 
... 
+0

, пожалуйста, используйте, по крайней мере, модуль csv –

0

Вы можете открыть файл в Microsoft Excel, удалите лишние столбцы, сохранить как CSV для файла # 1. Повторите ту же процедуру для остальных 2 таблиц.

0

Я обычно использую открытый офис (или Microsof преуспеть в случае, если вы используете окна), чтобы сделать это без написания программы и изменить файл и сохранить его. Ниже приведены две полезные ссылки, показывающие, как это сделать.

https://superuser.com/questions/407082/easiest-way-to-open-csv-with-commas-in-excel

http://office.microsoft.com/en-us/excel-help/import-or-export-text-txt-or-csv-files-HP010099725.aspx

1

однострочного решения для примера данных и желаемый результат:

cut -d, -f -3 huge.csv > file1.csv 
cut -d, -f 4-1004 huge.csv > file2.csv 
cut -d, -f 1005- huge.csv > file3.csv 

cut Программа доступна на большинстве POSIX платформах и является частью GNU Core Utilities. Существует также Windows version.

обновление в питона, так как OP попросил программу в приемлемом языке:

# python 3 (or python 2, if you must) 
import csv 
import fileinput 

output_specifications = ( # csv file name, selector function 
    ('file1.csv', slice(3)), 
    ('file2.csv', slice(3, 1003)), 
    ('file3.csv', slice(1003, 1703)), 
) 
output_row_writers = [ 
    (
     csv.writer(open(file_name, 'wb'), quoting=csv.QUOTE_MINIMAL).writerow, 
     selector, 
    ) for file_name, selector in output_specifications 
] 

reader = csv.reader(fileinput.input()) 
for row in reader: 
    for row_writer, selector in output_row_writers: 
     row_writer(row[selector]) 

Это работает с данными выборки данных и может быть вызвана с input.csv в качестве аргумента или трубопроводов из STDIN.

Смежные вопросы