当我使用绝对路径而不是相对路径时,为什么write()无法正常工作?

时间:2017-08-29 12:42:34

标签: python macos python-3.x zip python-3.6

我的桌面上有一个文件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文件时我应该总是使用相对路径,还是我做错了?

2 个答案:

答案 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'),但系统不允许您实际编写/创建文件。所以你有一些解决方案可以采用:

  1. 使用/lyrics.zip
  2. 更改当前工作目录
  3. 以实际写入的绝对路径或相对路径写入
  4. 等。等

答案 1 :(得分:0)

由于区分大小写以及您没有将dir更改为zip文件的位置,因此它可能无法正常工作。

'/users/apple/desktop/Creep lyrics.rtf'更改为'/Users/apple/desktop/lyrics.zip/Creep lyrics.rtf'可能会解决问题