Auparavant, j'avais publié Comment insérer par lots un fichier CSV dans un hyperfichier Tableau avec la commande COPY de type PostgreSQL, mais cette fois, il s'agit d'un hyperfichier existant. Apprenez à mettre à jour la source de données de votre fichier twbx (Tableau Packaged Workbook).
Normalement, si vous souhaitez mettre à jour la source de données du fichier twbx, vous devez ouvrir Tableau Desktop et utiliser l'interface graphique. https://help.tableau.com/current/pro/desktop/ja-jp/save_savework_packagedworkbooks.htm
Cependant, si le nombre de classeurs emballés et de sources de données à mettre à jour augmente, cela sera très gênant, il est donc préférable de mettre à jour avec CUI comme cette fois.
Avant d'entrer dans le sujet principal, parlons de ce qu'est un fichier twbx.
En conclusion, ** les fichiers twbx sont des fichiers twb (classeurs Tableau) et des sources de données (hyperfichiers) fichiers compressés **.
Vérifions en fait le contenu du fichier twbx.
Vous pouvez voir que sample.twbx
contient sample.twb
et Data / sample / sample.hyper
.
Ainsi, à l'inverse, ** les fichiers twb (classeurs Tableau) et les sources de données (hyperfichiers) peuvent être compressés au zip avec la structure de répertoire appropriée pour devenir des fichiers twbx **!
Ci-dessous, nous allons le mettre en œuvre sur la base de cette idée.
Nous allons l'implémenter dans le répertoire suivant.
.
├── conf
│ └── update_conf.csv
├── input
│ ├── sales.csv
│ └── titanic.csv
├── output
│ ├── sales.hyper
│ └── titanic.hyper
├── src
│ └── update_twbx.py
├── twbx
│ └── sample.twbx
└── work
.twbx /
Placez le fichier twbx (sample.twbx
) à mettre à jour dans .twbx /
.
sample.twbx
est créé en référençant deux sources de données (hyperfichiers).
Les sources de données sont Titanic (train.csv) et Predict Future Sales, qui sont familières à Kaggle. c / competitive-data-science-predire-future-sales) (sales_train.csv).
Les noms de fichiers ont été renommés ci-dessous pour plus de clarté.
.output /
Placez la source de données (hyperfichier) que vous souhaitez mettre à jour dans .output /
.
Veuillez noter ce qui suit concernant les fichiers à placer.
--Il doit être le même que le fichier hyper référencé par le twbx existant. --Place tous les fichiers hyper référencés par twbx existant
.conf / update_conf.csv
Décrivez ce qui suit dans le fichier de configuration (.conf / update_conf.csv
).
--Le répertoire où existe la source de données (hyper) à mettre à jour
csv:.conf/update_conf.csv
datasource,update_target_twbx,create_target_twbx
./output,./twbx/sample.twbx,./twbx/output.twbx
Après la préparation, implémentez le script Python. Implémentez le flux de traitement suivant.
. / Work
python:.src/update_twbx.py
import csv
import zipfile
import os
import glob
import re
import shutil
work_dir = './work'
twbx_dir = './twbx'
#Obtenez le chemin du fichier twbx à mettre à jour
with open('./conf/update_conf.csv') as f:
reader = csv.reader(f)
next(reader)
line_list = [row for row in reader]
for replace_dir, update_from, update_to in line_list:
#Décompressez le twbx à mettre à jour dans le répertoire de travail
with zipfile.ZipFile(update_from) as existing_zip:
existing_zip.extractall(work_dir)
#Obtenez le nom du fichier twb dans twbx
for file_name in os.listdir(work_dir):
if 'twb' in file_name:
twb_file_name = file_name
twb_file_path = os.path.join(work_dir, twb_file_name)
#répertoire de stockage de fichiers hyper dans twbx
data_dir_regexp = os.path.join(work_dir, 'Data/*/*.hyper')
#Obtenir une liste de fichiers hyper dans twbx
data_file_list = glob.glob(data_dir_regexp)
data_file_dict = {}
for data_file_path in data_file_list:
data_file_dict[re.sub(r'^.*/', '', data_file_path)] = data_file_path
replace_file_dict = {}
for replace_file_path in glob.glob(f'{replace_dir}*.hyper'):
replace_file_dict[re.sub(r'^.*/', '', replace_file_path)] = replace_file_path
#Source de données mise à jour incluse dans twbx
for key in data_file_dict.keys():
shutil.copy2(data_file_dict[key], replace_file_dict[key])
with zipfile.ZipFile(update_to, 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
new_zip.write(twb_file_path, arcname=twb_file_name)
for data_file_path in data_file_list:
data_file_name = re.sub(r'^.*/', '', data_file_path)
new_zip.write(data_file_path, arcname=data_file_name)
Vous pouvez mettre à jour votre classeur empaqueté en procédant comme suit:
python src/update_twbx.py
Après l'exécution, j'ai pu confirmer que le fichier twbx mis à jour a été créé à l'emplacement spécifié par ʻupdate_twbx_list.csv`!
Cette fois, j'ai suivi la structure de répertoires créée en décompressant le fichier twbx tel quel, mais vous pouvez placer la source de données dans n'importe quel répertoire en éditant la balise datasource du fichier twb décompressé. La modification du fichier twb est présentée dans Comment réécrire les informations de connexion à la base de données de Tableau Desktop (fichier twb) avec Python.
Recommended Posts