2016-07-26 1 views
1

Я довольно новичок в Python, но мне было трудно с этим начать. Я использую Python 3.Копирование нескольких столбцов из файла csv в существующий файл xls с использованием Python

Я искал googled и нашел немало модулей python, которые помогают в этом, но надеялись на более определенный ответ здесь. Так что, в основном, мне нужно прочитать из файла csv определенные столбцы i.e G, H, I, K и M. Мне нужны не последовательные.

Мне нужно прочитать эти столбцы из файла csv и перенести их в пустые столбцы в существующем xls с уже находящимися в нем данными.

Я смотрел в openpyxl, но он не работает с файлами csv/xls, только xlsx. Могу ли я использовать модуль xlwt для этого?

Любое руководство, по которому модуль может работать наилучшим образом для моей утилизации, будет с благодарностью. Между тем, я собираюсь возиться с xlwt/xlrd.

+0

xlwt/xlrd Я использовал. Кажется, они работают отлично. У Python есть csvreader –

+0

Я забыл упомянуть. Каждый из этих столбцов в файле csv имеет около 9k записей ... – Kepler

ответ

2

Я рекомендую использовать панды. Он имеет удобные функции для чтения и записи файлов csv и xls.

import pandas as pd 
from openpyxl import load_workbook 

#read the csv file 
df_1 = pd.read_csv('c:/test/test.csv') 

#lets say df_1 has columns colA and colB 
print(df_1) 

#read the xls(x) file 
df_2=pd.read_excel('c:/test/test.xlsx') 
#lets say df_2 has columns aa and bb 

#now add a column from df_1 to df_2 
df_2['colA']=df_1['colA'] 

#save the combined output 
writer = pd.ExcelWriter('c:/test/combined.xlsx') 
df_2.to_excel(writer) 
writer.save() 

#alternatively, if you want to add just one column to an existing xlsx file: 

#i.e. get colA from df_1 into a new dataframe 
df_3=pd.DataFrame(df_1['colA']) 


#create writer using openpyxl engine 
writer = pd.ExcelWriter('c:/test/combined.xlsx', engine='openpyxl') 

#need this workaround to provide a list of work sheets in the file 
book = load_workbook('c:/test/combined.xlsx') 
writer.book = book 
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) 

column_to_write=16 #this would go to column Q (zero based index) 
writeRowIndex=0 #don't plot row index 
sheetName='Sheet1' #which sheet to write on 

#now write the single column df_3 to the file 
df_3.to_excel(writer, sheet_name=sheetName, columns =['colA'],startcol=column_to_write,index=writeRowIndex) 

writer.save() 
+0

Wow! Я обязательно попробую! Таким образом, в модуле panda есть способы выбрать определенные столбцы в файле csv и сохранить в определенных столбцах в файле xls? Изменить: также эти файлы содержат в них большой объем данных, например, 10k записей для каждого столбца. – Kepler

+0

Я бы рекомендовал читать как файлы csv, так и xls, объединить нужные столбцы и сохранить все в новом файле. Это возможность? – jlarsch

+0

Да, я тоже буду работать. Придется посмотреть, как объединить столбцы. Будет ли количество записей вызывать проблему? – Kepler