如何解决错误 13 权限被拒绝:'tmp\\csv.gz
在我的 python 脚本中,我创建了一个 tmp 文件夹来处理 csv.gz 文件夹的提取。 部分代码:
try:
shutil.rmtree("tmp") # dangerous command removes all contents of tmp folder
except OSError as ex:
traceback.print_exc()
logmsg = "Folder already deleted or not present 'tmp'"
instalog.appendMessage('WARNING',logmsg)
if not os.path.exists('tmp'):
original_umask = os.umask(0)
desired_permission =0o755
os.makedirs('tmp',desired_permission)
os.umask(original_umask)
我不知道 umask 或想要的权限是否在做某事,因为我在对此事进行了一些挖掘后插入了该权限,但有时会发生权限被拒绝的错误,所以我想我可以把那个广告去掉,有时会拒绝我的许可,有时不会。这样,tmp 就创建好了。这将是我的下载目录,也就是脚本运行时的 tmp 文件夹:
download_dir = os.path.dirname(os.path.abspath(__file__)) + "\\tmp"
现在是代码给出错误的地方:
newfile_path = 'Todas as Ações Executadas - Outsourcer.csv'
## Download to folder and use whatever comes out
file_downloaded = False
while not file_downloaded:
for file in os.listdir("tmp"):
if file.endswith("csv.gz"):
fp = os.path.join('tmp',file)
logmsg = ("Extracting ",fp)
instalog.appendMessage('INFO',logmsg)
with gzip.open(fp,'r') as f_in:
with open(newfile_path,'wb') as f_out:
shutil.copyfileobj(f_in,f_out)
file_downloaded = True
elif file.endswith(".csv"):
fp = os.path.join('tmp',file)
logmsg = ("File was not compressed ",logmsg)
with open(fp,'rb') as f_in:
with open(newfile_path,f_out)
file_downloaded = True
我在 Windows 中运行脚本,有时错误只是消失了,但我需要它消失。 我将在powershell中提供文件夹的权限,如下图:
解决方法
import os
import shutil
import time
import gzip
newfile_path = 'Todas as Ações Executadas - Outsourcer.csv'
## Download to folder and use whatever comes out
file_downloaded = False
while not file_downloaded:
for file in os.listdir("tmp"):
if file.endswith("csv.gz"):
fname = os.path.join('tmp',file)
logmsg = ("Extracting ",fname)
instalog.appendMessage('INFO',logmsg)
try:
with gzip.open(fname) as f_in:
with open(newfile_path,'wb') as f_out:
shutil.copyfileobj(f_in,f_out)
file_downloaded = True
break
except OSError:
time.sleep(1)
elif file.endswith(".csv"):
fname = os.path.join('tmp',file)
logmsg = ("File was not compressed ",logmsg)
shutil.copy(fname,newfile_path)
file_downloaded = True
break
注意事项:
- 我已将
fp
重命名为fname
,因为fp
通常被认为表示file pointer
,而它是一个文件名或路径 -
gzip.open
默认以二进制模式打开。因此,解压后的文件也被写入二进制文件。我不确定这对于 Windows 下的 CSV 文件效果如何,因为 CSV 文件是一个文本文件。 - 我已将
shutil.copyfileobj
子句中的elif
替换为简单的shutil.copy
-
elif
子句没有try-except
子句。这可能意味着如果未压缩文件只是部分下载,则可能会被复制。除非您事先知道文件大小(并对此进行测试),否则无法检查文件是否已完全下载。因此,这可能会导致仅部分复制文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。