当我使用绝对路径而不是相对路径时,为什么 write() 不能正常工作?
Why is write() not working correctly when I am using absolute paths instead of relative ones?
我的 desktop.I 上有一个文件 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()
方法 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 文件时始终使用相对路径还是我做错了什么?
这不是 absolute/relative 路径问题。 os.chdir('/Users/apple/desktop')
更改了您当前的工作目录。
在第二个中尝试使用
Toy=zipfile.ZipFile('/Users/apple/desktop/lyrics.zip','w')
可能无法在当前工作目录中创建文件。此外,在 OSx 中,如果分区被格式化为不区分大小写,则路径不区分大小写(通常是这种情况,但并非总是如此)。
让我们举一些例子:
区分大小写
您的系统只有一个分区,并且该分区的格式不区分大小写:比路径 /Users/apple/desktop
、/users/apple/desktop
和 /users/APPLE/DESKtop
(等等...)被文件系统认为是完全相等的。
现在假设你把你的软件给了一个朋友,他有一个只有一个分区的系统,并且这个分区被格式化为 sensitive: 比路径 /Users/apple/desktop
、/users/apple/desktop
和 /users/APPLE/DESKtop
(等等...)被文件系统认为是完全不同的。路径 /Users/apple/desktop
和 /users/apple/desktop
在不同计算机之间不一致。
加分项:避免在路径中使用空格。 shell 将带有空格的路径理解为多个路径,除非它被引号包围,这很烦人。
当前工作目录
您使用 os.chdir('/Users/apple/desktop')
与在您的终端中发出 cd /Users/apple/desktop
相同(要知道 cd
是什么,请在您的终端中使用 运行 man cd
).
那一行更改了当前工作目录,或者处理了相对于所有相对路径的目录。您可以在终端中使用命令 pwd
了解您当前的工作目录。
我们举个例子。您正在 运行 将您的 python 脚本放在根目录 /
中,您的用户没有为其写入文件的权限。
Toy=zipfile.ZipFile('lyrics.zip','w')
尝试写入一个新文件 /lyrics.zip
但系统实际上不允许您 write/create 该文件。所以你有一些解决方案可以采用:
- 正在使用
os.chdir
更改您当前的工作目录
- 在您实际可以写入的绝对路径或相对路径中写入
等等等
可能由于区分大小写以及您没有将 dir 更改为 zip 文件的位置,所以它无法正常工作。
将 '/users/apple/desktop/Creep lyrics.rtf'
更改为 '/Users/apple/desktop/lyrics.zip/Creep lyrics.rtf'
可能会解决问题
我的 desktop.I 上有一个文件 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()
方法 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 文件时始终使用相对路径还是我做错了什么?
这不是 absolute/relative 路径问题。 os.chdir('/Users/apple/desktop')
更改了您当前的工作目录。
在第二个中尝试使用
Toy=zipfile.ZipFile('/Users/apple/desktop/lyrics.zip','w')
可能无法在当前工作目录中创建文件。此外,在 OSx 中,如果分区被格式化为不区分大小写,则路径不区分大小写(通常是这种情况,但并非总是如此)。
让我们举一些例子:
区分大小写
您的系统只有一个分区,并且该分区的格式不区分大小写:比路径 /Users/apple/desktop
、/users/apple/desktop
和 /users/APPLE/DESKtop
(等等...)被文件系统认为是完全相等的。
现在假设你把你的软件给了一个朋友,他有一个只有一个分区的系统,并且这个分区被格式化为 sensitive: 比路径 /Users/apple/desktop
、/users/apple/desktop
和 /users/APPLE/DESKtop
(等等...)被文件系统认为是完全不同的。路径 /Users/apple/desktop
和 /users/apple/desktop
在不同计算机之间不一致。
加分项:避免在路径中使用空格。 shell 将带有空格的路径理解为多个路径,除非它被引号包围,这很烦人。
当前工作目录
您使用 os.chdir('/Users/apple/desktop')
与在您的终端中发出 cd /Users/apple/desktop
相同(要知道 cd
是什么,请在您的终端中使用 运行 man cd
).
那一行更改了当前工作目录,或者处理了相对于所有相对路径的目录。您可以在终端中使用命令 pwd
了解您当前的工作目录。
我们举个例子。您正在 运行 将您的 python 脚本放在根目录 /
中,您的用户没有为其写入文件的权限。
Toy=zipfile.ZipFile('lyrics.zip','w')
尝试写入一个新文件 /lyrics.zip
但系统实际上不允许您 write/create 该文件。所以你有一些解决方案可以采用:
- 正在使用
os.chdir
更改您当前的工作目录
- 在您实际可以写入的绝对路径或相对路径中写入
等等等
可能由于区分大小写以及您没有将 dir 更改为 zip 文件的位置,所以它无法正常工作。
将 '/users/apple/desktop/Creep lyrics.rtf'
更改为 '/Users/apple/desktop/lyrics.zip/Creep lyrics.rtf'
可能会解决问题