我的桌面上有一个文件Creep lyrics.rtf
。我希望使用Python将其转换为zip文件。我使用了两种方法,一种是有效的,一种没有。
方法1(做了工作):
import zipfile,os
os.chdir('/Users/apple/desktop')
Toy=zipfile.ZipFile('lyrics.zip','w') #Toy is the variable name
Toy.write('Creep lyrics.rtf',compress_type=zipfile.ZIP_DEFLATED) #This specifies to use the deflate compression algorithm.
Toy.close()
Aproach 2(无效)
import zipfile
Toy=zipfile.ZipFile('lyrics.zip','w')
Toy.write('/users/apple/desktop/Creep lyrics.rtf',compress_type=zipfile.ZIP_DEFLATED)
Toy.close()
如您所见,我在第二种情况下使用了文件Creep lyrics.rtf
的绝对路径,并在第一种情况下使用了相对路径。
正如我迄今为止所处理的大多数情况一样,如果你使用相对路径或绝对路径并不重要!那么在尝试创建zip文件时我应该总是使用相对路径,还是我做错了?
答案 0 :(得分:2)
这不是绝对/相对路径问题。 os.chdir('/Users/apple/desktop')
已更改您当前的工作目录。
在第二个尝试使用
Toy=zipfile.ZipFile('/Users/apple/desktop/lyrics.zip','w')
也许您无法在当前工作目录中创建文件。另外,在OSx中,如果将分区格式化为不区分大小写(通常是这种情况,但并非总是如此),则路径不区分大小写。
让我们举一些例子:
您的系统有一个分区,并且该单个分区的格式设置为不区分大小写:考虑路径/Users/apple/desktop
,/users/apple/desktop
和/users/APPLE/DESKtop
(依此类推......)由文件系统完全相同。
现在假设您将软件提供给朋友,该系统具有单个分区的系统,并且该单个分区的格式为敏感:而不是路径/Users/apple/desktop
,{ {1}}和/users/apple/desktop
(等等......)被文件系统视为完全不同。路径/users/APPLE/DESKtop
和/Users/apple/desktop
在不同的计算机上不一致。
加分点:避免在路径中使用空格。 shell理解一个空格为多条路径的路径,除非它被引号括起来,这很烦人。
您使用的/users/apple/desktop
与终端中的os.chdir('/Users/apple/desktop')
相同(了解cd /Users/apple/desktop
是什么,在您的终端中运行cd
。)
该行更改了当前工作目录,或处理了相对于所有相对路径的目录。您可以使用终端中的man cd
命令了解当前的工作目录。
让我们举个例子。您正在根目录pwd
中运行您的python脚本,您的用户无权编写文件。
/
尝试编写新文件Toy=zipfile.ZipFile('lyrics.zip','w')
,但系统不允许您实际编写/创建文件。所以你有一些解决方案可以采用:
/lyrics.zip
等。等
答案 1 :(得分:0)
由于区分大小写以及您没有将dir更改为zip文件的位置,因此它可能无法正常工作。
将'/users/apple/desktop/Creep lyrics.rtf'
更改为'/Users/apple/desktop/lyrics.zip/Creep lyrics.rtf'
可能会解决问题