Konwersja do zip - różna waga spakowanych plików

0

Cześć, potrzebuje spakować do zip kilka plików i folderów taką samą metodą jak "wyślij do -> folder skompresowany (zip)" tylko, że skryptem. Do tej pory konwersja poprzez skrypt dawała inną wage zipa niż konwersja ręczna:
powershell

$compress = @{
  Path = "``[Content_Types``].xml", "_rels", "word"
  CompressionLevel = "Fastest"
  DestinationPath = "Draft.zip"
}
Compress-Archive @compress

lub pythonem

 with ZipFile('output.zip', 'w') as zipObj:
    zipObj.write('_rels/.rels')
    zipObj.write('word/document.xml')
    zipObj.write('word/numbering.xml')
    zipObj.write('word/styles.xml')
    zipObj.write('word/_rels/document.xml.rels')
    zipObj.write('[Content_Types].xml')

 zipObj.close()

To waga tych zipów jest inna niż gdy pakuje je ręcznie przez "wyslij do -> do folder skompresowany (zip)".

Moze jeszcze napisze krótko po co mi to:

Modyfikowałem sobie plik docx przez zmiane rozszerzenia na zip i edycje pliku word/document.xml. Po zmianach pakuje z powrotem do zipa i zmieniam rozszerzenie na .docx i wszystko działa gdy pakuje ręcznie, a gdy pakuje skryptem to jest pusty plik.

0

Po co Ci to zipObj.close(), skoro używasz context managera? Jakiej biblioteki używasz?

0

Nie pisałem nigdy nic w pythonie, poznałem tylko troche składnie na potrzeby tego małego programu który masowo dodaje mi fragment tekstu w pliku docx., a kod do spakowania to ze stackoverflow :P nie skupiam sie tutaj na ładnym kodzie, albo optymalnych rozwiązaniach, chce zeby to po prostu działało, a potem będe troche sprzątał w kodzie. A co do biblioteki to - zipfile

2

ZIP wspiera różne metody i parametry kompresji, a nawet opcje bez żadnej kompresji, wiec rozmiar o niczym nie świadczy. U ciebie jest raczej problem ze ścieżkami jeśli mam zgadywać. Pewnie pliki które próbujesz dodać wcale nie są w CWD.

0

Jaki problem ze scieżkami? i co znaczy cwd?

Spakowane pliki są identyczne jeśli o to pytasz. Nawet jak te spakowane przez skrypt pliki sobie wypakuje i spakuje jeszcze raz ręcznie, a potem zmienie rozszerzenie na docx to wszystko działa.

1

No to pisz jasno o_O Napisałeś gdy pakuje skryptem to jest pusty plik. więc uznałem ze chodzi o pustego zipa.
Ustaw moze zero kompresji jak budujesz tego zipa skryptem? Masz w konstruktorze parametr compression

0

@Codin: Zanim zastosujesz, przeczytaj sobie dokładnie dokumentację zipfile, bo widzę, że się zaczyna "dziwna" rozmowa.

0

Chodziło mi o pusty plik docx (biała pusta strona). A w powershellu juz próbowałem zmieniać parametr -CompressionLevel na wszystkie trzy czyli: Optimal, NoCompression, Fastest. I żadne nie pomogło

0

Dobra problem rozwiązany, dzięki @lion137 i @Shalom za pomoc ;)

Ustawiłem trzeci parametr w konstruktorze na ZIP_DEFLATED

with ZipFile('output.zip', 'w', 8) as zipObj:
    zipObj.write('_rels/.rels')
    zipObj.write('word/document.xml')
    zipObj.write('word/numbering.xml')
    zipObj.write('word/styles.xml')
    zipObj.write('word/_rels/document.xml.rels')
    zipObj.write('[Content_Types].xml')

1 użytkowników online, w tym zalogowanych: 0, gości: 1