J'essaie essentiellement de copier certaines colonnes spécifiques d'un fichier CSV et de les coller dans un fichier Excel existant [*. Xlsx] en utilisant python. Disons par exemple que vous avez un fichier CSV comme celui-ci:
col_1 col_2 col_3 col_4
1 2 3 4
5 6 7 8
9 10 11 12
Donc, je voulais copier les deux col_3 et col_4 et les coller dans col_8 et col_9 dans un fichier Excel existant [qui est un format .XLSX]. J'ai essayé cela de différentes manières pour résoudre, mais je n'ai pas pu trouver le moyen exact. j'ai essayé quelque chose comme ça:
with open( read_x_csv, 'rb') as f:
reader = csv.reader(f)
for row in reader:
list1 = row[13]
queue1.append(list1)
list2 = row[14]
queue2.append(list2)
list3 = row[15]
queue3.append(list3)
list4 = row[16]
queue4.append(list4)
puis
rb = open_workbook("Exact file path.....")
wb = copy(rb)
ws = wb.get_sheet(0)
row_no = 0
for item in queue1:
if(item != ""):
ii = int(item)
ws.write(row_no,12,ii)
row_no = row_no + 1
#ws.write(item)
print item
else:
ws.write(row_no,12,item)
row_no = row_no + 1
wb.save("Output.xls")
mais le problème avec cette solution est qu'elle ne me permet pas d'enregistrer au format * .XLSX qui est strictement requis pour moi.
J'ai essayé d'utiliser Openpyxl car il peut gérer le format * .XLSX, mais je n'ai pas trouvé de moyen de modifier le fichier Excel existant. quelqu'un peut-il m'aider à ce sujet?
Doute: 1) Pouvons-nous vraiment lire une colonne entière d'un fichier CSV et la stocker dans un tableau/liste en utilisant python? 2) Pouvons-nous modifier le fichier Excel existant qui est au format .XLSX en utilisant openpyxl ou tout autre package?
Vous pouvez essayer l'implémentation suivante
from openpyxl import load_workbook
import csv
def update_xlsx(src, dest):
#Open an xlsx for reading
wb = load_workbook(filename = dest)
#Get the current Active Sheet
ws = wb.get_active_sheet()
#You can also select a particular sheet
#based on sheet name
#ws = wb.get_sheet_by_name("Sheet1")
#Open the csv file
with open(src) as fin:
#read the csv
reader = csv.reader(fin)
#enumerate the rows, so that you can
#get the row index for the xlsx
for index,row in enumerate(reader):
#Assuming space separated,
#Split the row to cells (column)
row = row[0].split()
#Access the particular cell and assign
#the value from the csv row
ws.cell(row=index,column=7).value = row[2]
ws.cell(row=index,column=8).value = row[3]
#save the csb file
wb.save(dest)
Pouvons-nous vraiment lire une colonne entière d'un fichier CSV et la stocker dans un tableau/liste en utilisant python? Non, car les fichiers sont lus séquentiellement, le lecteur csv ne peut pas lire une colonne de données sur une ligne. Au lieu de cela, vous pouvez lire tout le contenu et utiliser izip et islice pour obtenir une colonne particulière. Vous pouvez également utiliser numpy.array
Pouvons-nous modifier le fichier Excel existant qui est au format .XLSX en utilisant openpyxl ou tout autre package? Oui, voir l'exemple ci-dessus
from openpyxl import load_workbook
# Class to manage Excel data with openpyxl.
class Copy_Excel:
def __init__(self,src):
self.wb = load_workbook(src)
self.ws = self.wb.get_sheet_by_name("Sheet1")
self.dest="destination.xlsx"
# Write the value in the cell defined by row_dest+column_dest
def write_workbook(self,row_dest,column_dest,value):
c = self.ws.cell(row = row_dest, column = column_dest)
c.value = value
# Save Excel file
def save_Excel(self) :
self.wb.save(self.dest)
Dans mon cas, j'ai gardé le fichier Excel ouvert, donc le script n'a pas pu être enregistré et j'ai obtenu une autorisation refusée. Après avoir fermé le fichier Excel, mon script a mis à jour le même fichier Excel.