Python临时目录中文件移动后未被识别,如何正确迁移并编辑?
问题解决:将文件移入临时目录并修改
你的代码存在两个关键问题,导致文件路径不被识别:
urllib.request.urlretrieve(sub_odk_url, 'sub_odk.xlsx')会把文件下载到当前工作目录,而非你创建的临时目录。后续拼接临时目录路径与文件名后,该路径下并无对应文件,因此isfile返回False。isfile(sub_odk_path.read())用法错误:isfile需要传入路径对象或字符串,不能调用read()(这是读取文件内容的方法,会引发错误)。
以下是两种可行的解决方案:
方法1:直接下载文件到临时目录
让urlretrieve直接将文件保存到临时目录,省去后续移动步骤:
import tempfile from pathlib import Path import urllib.request from os.path import isfile with tempfile.TemporaryDirectory() as workdir: temp_dir = Path(workdir) print(temp_dir) # 直接指定临时目录下的完整保存路径 sub_odk_path = temp_dir / 'sub_odk.xlsx' urllib.request.urlretrieve(sub_odk_url, str(sub_odk_path)) # 将Path对象转为字符串传入 # 正确检查文件是否存在 print('test: ', sub_odk_path, ' Path exists:', isfile(sub_odk_path)) # 在临时目录内修改文件 with open(sub_odk_path, 'r+') as f: content = f.read() # 执行自定义修改操作,示例:替换文本 modified_content = content.replace('placeholder', 'updated_content') f.seek(0) f.write(modified_content) f.truncate()
方法2:先下载再移动到临时目录
若需先在其他位置处理文件,再移入临时目录,可使用shutil.move:
import tempfile from pathlib import Path import urllib.request from os.path import isfile import shutil with tempfile.TemporaryDirectory() as workdir: temp_dir = Path(workdir) print(temp_dir) # 先下载到系统默认临时位置(urlretrieve自动生成临时文件) sub_odk_temp_path, _ = urllib.request.urlretrieve(sub_odk_url) # 定义临时目录内的目标路径 sub_odk_target_path = temp_dir / 'sub_odk.xlsx' # 移动文件到临时目录 shutil.move(sub_odk_temp_path, sub_odk_target_path) # 检查文件是否存在 print('test: ', sub_odk_target_path, ' Path exists:', isfile(sub_odk_target_path)) # 在临时目录内修改文件 # ... 执行与方法1相同的编辑操作即可
额外说明
- 借助
with tempfile.TemporaryDirectory()上下文管理器,临时目录会在代码块结束后自动删除,所有文件操作必须放在该代码块内完成。 - 如果你习惯使用
pathlib.Path的API,可直接用sub_odk_path.exists()替代isfile,写法更统一:print('Path exists:', sub_odk_path.exists())
内容的提问来源于stack exchange,提问作者alim1990
相关产品推荐
相关产品推荐

