Un script python pour Mac qui zippe sans caractères déformés sous Windows

Contexte

Lors du passage d'un fichier zip sur Mac-> Windows (environnement japonais), le code de caractère du nom de fichier reste utf-8 avec la compression zip par défaut Mac, et des caractères déformés se produisent lors de la décompression sous Windows. Il est possible d'installer un logiciel tel que MacWinZip pour le compresser afin que cela ne se produise pas, mais l'installation est quelque peu gênante. J'ai donc créé un script de compression Zip pour Windows qui s'exécute sur Python 2.7.

Décompressez Windows-> Mac

Avec OSX Yosemite que j'utilise, les fichiers zip créés sous Windows peuvent être décompressés sans problème, mais dans des environnements tels que Linux, le nom du fichier sjis peut être déformé, donc dans ce cas, changez le nom du fichier. Utilisez un script qui change en utf-8 et décompresse (Exemple de script de décompression).

Comment utiliser

$ python win_zip.py <Le chemin du dossier que vous souhaitez compresser>

Mise en garde

__ Code (win_zip.py) __


# coding:utf-8
import os, sys, zipfile, shutil
from unicodedata import normalize

def mac_path_to_sjis(mac_path):
	#Le problème est résolu car le nom de fichier de mac a divisé les points troubles.
	#Si vous ne le faites pas, vous obtiendrez une exception où la turbidité ne peut pas être changée en sjis.
	norm_path = normalize('NFC', unicode(mac_path,'utf8'))
	return norm_path.encode('sjis')

def check_yes_no(message):
	# raw_input returns the empty string for "enter"
	yes = set(['yes','y'])
	no = set(['no','n'])
	choice = raw_input(message + os.linesep).lower()
	if choice in yes:
		return True
	elif choice in no:
		return False
	else:
		print "Please respond with 'yes' or 'no'"
		return check_yes_no(message) # loop

def zip_dir(in_dir_path):
	in_parent_path, in_dirname = os.path.split(in_dir_path)
	os.chdir(in_parent_path)
	with zipfile.ZipFile(in_dirname + '.zip', 'w') as zip_file:
		for parent_path, dirs, files in os.walk(in_dirname):
			sjis_dir_path = mac_path_to_sjis(parent_path)
			os.makedirs(sjis_dir_path)
			for fname in files:
				if fname[0] == '.': continue # ignore all secret file
				file_path = os.sep.join((parent_path, fname)) # path of original file
				print 'zipping : {0}'.format(file_path)
				sjis_file_path = mac_path_to_sjis(file_path)
				if file_path == sjis_file_path:
					zip_file.write(file_path) # file name is all alphabet
				else:
					shutil.copyfile(file_path, sjis_file_path) # copy file in sjis file name
					zip_file.write(sjis_file_path)
					os.remove(sjis_file_path) # remove sjis format file
			# remove parent folder in sjis format
			os.removedirs(sjis_dir_path)


if __name__ == '__main__':
	if len(sys.argv) != 2:
		sys.exit('Only 1 argument(path of directory) has to be specified as argument!')
	zip_target_path = sys.argv[1]
	if os.path.exists(zip_target_path) == False:
		sys.exit('Directory {0} does not exists!'.format(zip_target_path))
	if zip_target_path.endswith(os.sep):
		zip_target_path = zip_target_path[0:-1] # remove seperator
	zip_path = zip_target_path + '.zip'
	if os.path.exists(zip_path):
		if check_yes_no('Zip file already exists. Do you want to replace? [y/n]') == False:
			print 'Bye'
			sys.exit()
	zip_dir(zip_target_path)

Si vous avez des problèmes ou des améliorations, n'hésitez pas à nous le faire savoir.

Recommended Posts

Un script python pour Mac qui zippe sans caractères déformés sous Windows
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
Construire l'extension Python E-Cell 4 sur Windows 7 (64 bits)
Procédure de création d'un environnement CDK sous Windows (Python)
Un script python qui souhaite utiliser l'heure de démarrage / fin de Mac pour la gestion des présences
Créer un script Python pour Wake on LAN (Wake on LAN over NAT [5])
Créer un environnement virtuel pour python sur mac [Très facile]
Construire un environnement Python sur Mac
Créer un environnement Python sur Mac (2017/4)
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
Solution de contournement pour sys.argv non transmise lors de l'exécution d'un script Python avec uniquement le nom de fichier sur Python2.7 sous Windows
Remarques sur l'utilisation d'OpenCV avec Windows10 Python 3.8.3.
[Mac] Création d'un environnement virtuel pour Python
Utiliser sans installer python 2.x sous Windows
Windows Qt5.4 Python3.4 QProcess caractères japonais brouillés
Points à surveiller lors de la création d'un environnement Python sur un Mac
Présentation d'une bibliothèque qui n'était pas incluse dans pip sur Python / Windows
Mettre la liaison MeCab pour Python sur Windows, Mac et Linux avec pip
Janken Poi avec Python Exécutons sur un serveur local Windows pour les débutants
Classe pour PYTHON qui peut être utilisée sans connaître LDAP
(Windows) Causes et solutions de contournement pour UnicodeEncodeError dans Python 3
Créez simplement un environnement d'exécution Python 3 sous Windows
Créer un environnement Python sur Mac (Mountain Lion)
Créez un environnement de développement Python sur votre Mac
Installez séparément une version de Python qui n'est pas préinstallée sur votre Mac
python sur mac
Un mémorandum pour toucher Python Flask avec Heroku
Installation de TensorFlow sur Windows Easy pour les débutants en Python
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Un véritable moyen pour les personnes utilisant python 3.8.0-2 à partir de Windows de travailler avec des caractères multi-octets
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Créer un environnement de développement Python basé sur GVim sur Windows 10 (3) GVim8.0 et Python3.6
J'ai essayé Python sur Mac pour la première fois.
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Créer un environnement Python d'apprentissage automatique sur Mac OS
[Heroku] Mémo pour le déploiement d'applications Python à l'aide d'Heroku sous Windows [Python]
Jusqu'à dessiner un graphe 3D avec Python dans Windows10
J'ai créé une VM qui exécute OpenCV pour Python
Créez un environnement de développement Python 3 (Anaconda) confortable avec Windows
Remarques sur l'installation de Chainer 1.5 pour GPU sous Windows
Créer un environnement de développement Python basé sur GVim sur l'installation de Windows 10 (1)
Créer un environnement de développement Python sur Mac OS X
Que contient cette variable (lorsque le script Python est en cours d'exécution)
PIL en Python sur Windows8 (pour Google App Engine)
Créez un environnement Python sur votre Mac en utilisant pyenv
problème que la vérification du certificat a échoué sur mac python pip
Construction d'environnement Python pour les débutants en programmation (Mac OS)
Créez un environnement shell et python décent sur Windows
Pour ceux qui ne peuvent pas installer Python sur Windows XP
Installez Python sur Mac
Installer Python 3 dans un environnement Mac
python basic ② sous windows
Installez python sur Windows
Installez Python 3.4 sur Mac
Installez Python (pour Windows)
[Visual Studio Code] [Python] [Windows] Prise en charge des caractères japonais déformés dans la sortie de tâche / débogage VS Code
J'ai remplacé le livre de recettes Windows PowerShell par un script python.
Créer un environnement de développement Python (pyenv / virtualenv) sur Mac (Homebrew)