ValueError: write() requires mode 'w', 'x', or 'a' in Python zipfile
ValueError: write() requires mode 'w', 'x', or 'a' in Python zipfile
我正在尝试打开存档中的特定文件,然后向其中写入一些内容。我正在使用 zipfile.open() 函数来访问文件:
import zipfile
my_zip = zipfile.ZipFile('D:\files\acrhive.zip')
with my_zip.open('hello.txt', 'w') as my_file:
my_file.write(b'Hello')
my_zip.close()
但是,它警告我有关名为 'hello.txt' 的重复文件。之后我收到以下错误:
ValueError: write() requires mode 'w', 'x', or 'a'
我做错了什么?
我的完整回溯:
D:\python\lib\zipfile.py:1506: UserWarning: Duplicate name: 'hello.txt'
return self._open_to_write(zinfo, force_zip64=force_zip64)
Traceback (most recent call last):
File "D:\files\python.py", line 8, in <module>
with my_zip.open(file, 'w') as my_file:
File "D:\python\lib\zipfile.py", line 1506, in open
return self._open_to_write(zinfo, force_zip64=force_zip64)
File "D:\python\lib\zipfile.py", line 1598, in _open_to_write
self._writecheck(zinfo)
File "D:\python\lib\zipfile.py", line 1699, in _writecheck
raise ValueError("write() requires mode 'w', 'x', or 'a'")
ValueError: write() requires mode 'w', 'x', or 'a'
此时您正在打开存档文件中的文件进行写入,但存档文件本身仅用于读取(默认模式)。
这里的关键是对于文件系统来说,存档里面的文件并不是真正的真实文件存在。对于文件系统,它们只是存档文件中的字节。 zipfile
库,像许多文件管理器一样,特意将它们作为虚拟文件提供给您 - 一些看起来和工作起来都像普通文件的东西,以便更容易以相同的方式使用它们。
所以请尝试打开 zip 文件本身 以进行写入:
zipfile.ZipFile('D:\files\archive.zip', 'w')
夫妇注意事项:
- zip 文件和 zip 文件中的文件都应该打开进行写入。
- 在您发布的问题代码中,您似乎在 zip 文件名中有错别字:
acrhive.zip
与 archive.zip
。如果我的回答代码开始因“找不到文件”而失败,这可能就是原因。
- 您也应该使用上下文管理器打开 zip 文件,就像打开其他文件和 file-like 东西一样。
所以把它们放在一起:
with zipfile.ZipFile('D:\files\archive.zip', 'w') as my_zip:
with my_zip.open('hello.txt', 'w') as my_file:
my_file.write(b'Hello')
我正在尝试打开存档中的特定文件,然后向其中写入一些内容。我正在使用 zipfile.open() 函数来访问文件:
import zipfile
my_zip = zipfile.ZipFile('D:\files\acrhive.zip')
with my_zip.open('hello.txt', 'w') as my_file:
my_file.write(b'Hello')
my_zip.close()
但是,它警告我有关名为 'hello.txt' 的重复文件。之后我收到以下错误:
ValueError: write() requires mode 'w', 'x', or 'a'
我做错了什么?
我的完整回溯:
D:\python\lib\zipfile.py:1506: UserWarning: Duplicate name: 'hello.txt'
return self._open_to_write(zinfo, force_zip64=force_zip64)
Traceback (most recent call last):
File "D:\files\python.py", line 8, in <module>
with my_zip.open(file, 'w') as my_file:
File "D:\python\lib\zipfile.py", line 1506, in open
return self._open_to_write(zinfo, force_zip64=force_zip64)
File "D:\python\lib\zipfile.py", line 1598, in _open_to_write
self._writecheck(zinfo)
File "D:\python\lib\zipfile.py", line 1699, in _writecheck
raise ValueError("write() requires mode 'w', 'x', or 'a'")
ValueError: write() requires mode 'w', 'x', or 'a'
此时您正在打开存档文件中的文件进行写入,但存档文件本身仅用于读取(默认模式)。
这里的关键是对于文件系统来说,存档里面的文件并不是真正的真实文件存在。对于文件系统,它们只是存档文件中的字节。 zipfile
库,像许多文件管理器一样,特意将它们作为虚拟文件提供给您 - 一些看起来和工作起来都像普通文件的东西,以便更容易以相同的方式使用它们。
所以请尝试打开 zip 文件本身 以进行写入:
zipfile.ZipFile('D:\files\archive.zip', 'w')
夫妇注意事项:
- zip 文件和 zip 文件中的文件都应该打开进行写入。
- 在您发布的问题代码中,您似乎在 zip 文件名中有错别字:
acrhive.zip
与archive.zip
。如果我的回答代码开始因“找不到文件”而失败,这可能就是原因。 - 您也应该使用上下文管理器打开 zip 文件,就像打开其他文件和 file-like 东西一样。
所以把它们放在一起:
with zipfile.ZipFile('D:\files\archive.zip', 'w') as my_zip:
with my_zip.open('hello.txt', 'w') as my_file:
my_file.write(b'Hello')