【Python】GRCで保存した複数のcsvファイルを一つのExcelファイルにまとめる方法

GRCを使用してホームページの計測をしているブロガーやマーケターの皆さん。

GRCはプランによって使用できる機能に制限がかかってしまいます。

そこで今回はGRCから保存した順位を、一つのファイルにまとめるプログラムを作りました。

GRCから保存したCSVファイルを一つのファイルにまとめる

import os
import glob
import csv
import openpyxl

csvPath = r'C:\Users\csvまでのパス'
outputPath = r'C:\Users\xlsxを保存したいパス'

wb = openpyxl.Workbook()
ws = wb.active

files = glob.glob(csvPath+"/*")
for file in files:

    fileName = os.path.basename(file)
    print(fileName + 'からデータを抽出中...')
    wb.create_sheet(fileName)
    ws = wb.get_sheet_by_name(fileName)
    count = 0
    saveFile = os.path.join(outPutPath,'マージ.xlsx')

    with open(file,'r') as f :
     reader = csv.reader(f)
     
     for site,url,word,yahoo,google,bing in reader :
        count = count + 1
        ws[f"A{count}"] = site
        ws[f"B{count}"] = url
        ws[f"C{count}"] = word
        ws[f"D{count}"] = yahoo
        ws[f"E{count}"] = google
        ws[f"F{count}"] = bing
wb.save(saveFile)

実行結果

データは隠していますが、しっかり出力されています。

抽出したcsvファイルごとにシートを分け、ファイルの名前をシートの名前に

GRCの出力設定はカスタマイズできます。
下記画像がCSVファイルです。

コードの解説

import os
import glob
import csv
import openpyxl

csvPath = r'C:\Users\csvまでのパス'
outputPath = r'C:\Users\xlsxを保存したいパス'

wb = openpyxl.Workbook()
ws = wb.active

files = glob.glob(csvPath+"/*")

まずインポートと、読み込むcsvのディレクトリと保存先のディレクトリをセットしてください。
その後openpyxl.Workbook()でエクセルファイルを書き換えられる状態にし、wb.activeでアクティブ状態にしてください。

最後にglob.globでcsvPathに入っているファイル名をfilesに入れます。
そして下記ソースのfor分でfilesに入っているファイル名を一軒づつfileに入れて処理をします。

for file in files:

    fileName = os.path.basename(file)
    print(fileName + 'からデータを抽出中...')
    wb.create_sheet(fileName)
    ws = wb.get_sheet_by_name(fileName)
    count = 0
    saveFile = os.path.join(outPutPath,'マージ.xlsx')

    with open(file,'r') as f :
     reader = csv.reader(f)

os.path.basename(file)でfileに入っているフルパスからファイル名だけを取得し、wb.create_sheet(fileName)でファイル名のシートを作成します。

ws = wb.get_sheet_by_name(fileName)でこれから書き込むシートを選択。
count = 0はエクセルにセルを選択する際、下に書き続けるために使用。

ここに書いた理由は途中でエラーが発生しても、発生直前のデータを保存する為です。

open(file,’r’)でファイルを読み込むと宣言し、csv.reader(f)で読み込んだ内容をreaderに入れてます。

     for site,url,word,yahoo,google,bing in reader :
        count = count + 1
        ws[f"A{count}"] = site
        ws[f"B{count}"] = url
        ws[f"C{count}"] = word
        ws[f"D{count}"] = yahoo
        ws[f"E{count}"] = google
        ws[f"F{count}"] = bing
wb.save(saveFile)

for site,url,word,yahoo,google,bing in readerではreaderに入っている変数をそれぞれsite,url,word,yahoo,google,bingに入れてます。

count = count + 1で書き込む行を選んで、ws[f”A{count}”] = siteから書き込みが開始されます。
count = count + 1をすることでループを繰り返すたびにcountの数値が増え、同じセルに書き込まずに済みます。
wb.save(saveFile)を書き込みのループの中に入れると処理が遅くなるので、高速化したい場合は一番最後に記述してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA