Ein Python-Skript für Mac, das unter Windows ohne verstümmelte Zeichen komprimiert wird

Hintergrund

Wenn Sie eine Zip-Datei unter Mac-> Windows (japanische Umgebung) übergeben, bleibt der Zeichencode des Dateinamens bei der Standard-Zip-Komprimierung von Mac utf-8, und beim Dekomprimieren mit Windows treten verstümmelte Zeichen auf. Es ist möglich, Software wie MacWinZip zu installieren, um sie zu komprimieren, damit dies nicht geschieht, aber die Installation ist etwas mühsam. Also habe ich ein Zip-Komprimierungsskript für Windows erstellt, das unter Python 2.7 ausgeführt wird.

Entpacken Sie Windows-> Mac

Mit OSX Yosemite, das ich verwende, können unter Windows erstellte Zip-Dateien problemlos dekomprimiert werden. In Umgebungen wie Linux kann der sjis-Dateiname jedoch verstümmelt sein. Ändern Sie in diesem Fall den Dateinamen. Verwenden Sie ein Skript, das in utf-8 geändert und dekomprimiert wird (Beispiel für ein Dekomprimierungsskript).

Wie benutzt man

$ python win_zip.py <Der Pfad des Ordners, den Sie komprimieren möchten>

Hinweis

__ Code (win_zip.py) __


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

def mac_path_to_sjis(mac_path):
	#Das Problem ist gelöst, weil der Dateiname von mac trübe Punkte geteilt hat.
	#Wenn Sie dies nicht tun, erhalten Sie eine Ausnahme, bei der die Trübung nicht in sjis geändert werden kann.
	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)

Wenn Sie Probleme oder Verbesserungen haben, zögern Sie bitte nicht, uns dies mitzuteilen.

Recommended Posts

Ein Python-Skript für Mac, das unter Windows ohne verstümmelte Zeichen komprimiert wird
Ein Python-Skript, das auf dem Mac erstellte ._DS_Store- und ._ * -Dateien löscht
Erstellen Sie die Python-Erweiterung E-Cell 4 unter Windows 7 (64 Bit).
Vorgehensweise zum Erstellen einer CDK-Umgebung unter Windows (Python)
Ein Python-Skript, das die Start- / Endzeit des Mac für die Anwesenheitsverwaltung verwenden möchte
Erstellen Sie ein Python-Skript für Wake on LAN (Wake on LAN über NAT [5])
Erstellen einer virtuellen Umgebung für Python auf dem Mac [Sehr einfach]
Erstellen einer Python-Umgebung auf einem Mac
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Wettbewerb mit VS-Code Erstellen Sie eine Python-Umgebung für Profis unter Windows
Problemumgehung für sys.argv wird nicht übergeben, wenn ein Python-Skript mit nur dem Dateinamen unter Python2.7 unter Windows ausgeführt wird
Hinweise zur Verwendung von OpenCV mit Windows 10 Python 3.8.3.
[Mac] Erstellen einer virtuellen Umgebung für Python
Verwenden Sie es, ohne Python 2.x unter Windows zu installieren
Windows Qt5.4 Python3.4 QProcess Japanische verstümmelte Zeichen
Dinge, auf die Sie beim Erstellen einer Python-Umgebung auf einem Mac achten sollten
Einführung einer Bibliothek, die unter Python / Windows nicht in pip enthalten war
Setzen Sie die MeCab-Bindung für Python unter Windows, Mac und Linux mit pip ein
Janken Poi mit Python Lassen Sie uns für Anfänger auf einem lokalen Windows-Server laufen
Klasse für PYTHON, die ohne Kenntnis von LDAP betrieben werden kann
(Windows) Ursachen und Problemumgehungen für UnicodeEncodeError in Python 3
Erstellen Sie einfach eine Python 3-Ausführungsumgebung unter Windows
Erstellen Sie eine Python-Umgebung auf einem Mac (Mountain Lion)
Erstellen Sie eine Python-Entwicklungsumgebung auf Ihrem Mac
Installieren Sie separat eine Version von Python, die nicht auf Ihrem Mac vorinstalliert ist
Python auf Mac
Ein Memorandum zum Berühren von Python Flask mit Heroku
Installieren von TensorFlow unter Windows Easy für Python-Anfänger
Ein Python-Skript, das die Anzahl der Jobs für eine bestimmte Bedingung von Indeed.com abruft
Eine echte Möglichkeit für Benutzer von Python 3.8.0-2 aus Windows, mit Multi-Byte-Zeichen zu arbeiten
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (3) GVim8.0 und Python3.6
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Erstellen Sie eine Python-Umgebung für maschinelles Lernen unter Mac OS
[Heroku] Memo zum Bereitstellen von Python-Apps mit Heroku unter Windows [Python]
Bis zum Zeichnen eines 3D-Diagramms mit Python in Windows 10
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Erstellen Sie eine komfortable Python 3 (Anaconda) -Entwicklungsumgebung mit Windows
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (1)
Erstellen Sie eine Python-Entwicklungsumgebung unter Mac OS X.
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
PIL in Python unter Windows8 (für Google App Engine)
Erstellen Sie mit pyenv eine Python-Umgebung auf Ihrem Mac
Problem, dass die Zertifikatsüberprüfung auf Mac Python Pip fehlgeschlagen ist
Python-Umgebungskonstruktion für Programmieranfänger (Mac OS)
Erstellen Sie unter Windows eine anständige Shell- und Python-Umgebung
Für diejenigen, die Python unter Windows XP nicht installieren können
Installieren Sie Python auf dem Mac
Installieren von Python 3 in einer Mac-Umgebung
Python Basic ② in Windows
Installieren Sie Python unter Windows
Installieren Sie Python 3.4 auf einem Mac
Installieren Sie Python (für Windows)
[Visual Studio Code] [Python] [Windows] Unterstützung für verstümmelte japanische Zeichen in der VS Code-Task- / Debug-Ausgabe
Ich habe das Windows PowerShell-Kochbuch durch ein Python-Skript ersetzt.
Erstellen Sie eine Python-Entwicklungsumgebung (pyenv / virtualenv) auf einem Mac (Homebrew).