【问题标题】:Where will the file be created?文件将在哪里创建?
【发布时间】:2023-05-29 11:56:01
【问题描述】:
import tempfile
storage_path = os.path.join(tempfile.gettempdir(), 'storage.data')
with open(STORAGE_PATH, 'w') as f:
f.write(data)
文件将在哪个目录中创建?有可能在那里看到还是看不见?
【问题讨论】:
标签:
python
file
temporary-files
【解决方案1】:
你只创建了一个字符串,仅此而已。
tempfile.gettempdir() function 返回一个字符串:
返回用于临时文件的目录名称
这只是一个名字。如果您需要知道系统上的位置,但又不想单步执行文档中列出的规则,请打印它;有 3 个环境变量和另外 3 个标准位置可供测试,以查看当前用户有权创建文件的位置。
接下来,os.path.join() 接受字符串并输出一个字符串。磁盘上没有创建任何内容来构建这些字符串。这将取决于您是否真的对该字符串执行某些操作(例如调用 os.makedirs() 或 open())来创建将要创建的内容。
如果您对该字符串使用普通的open() 调用,则会在其他进程可见的tempfile.gettempdir() 位置创建一个常规文件。
如果您需要安全地创建一个临时文件,以使攻击者无法访问该文件或影响其创建位置的方式,请使用tempfile.TemporaryFile() constructor 或tempfile.mkstemp() function ;在 UNIX 系统上,这将导致目录中不再列出的文件(该文件存在但不能被其他进程打开)。但是,它将在tempfile.gettempdir() 位置创建,因此它将用完该目录所在的相关磁盘分区上的磁盘空间。
【解决方案2】:
来自this link...
名单是:
-
TMPDIR 环境变量命名的目录
-
TEMP 环境变量命名的目录
-
TMP 环境变量命名的目录
-
特定于平台的位置:
- 在 Windows 上,目录
C:\TEMP、C:\TMP、\TEMP 和 \TMP,按此顺序排列。
- 在所有其他平台上,目录
/tmp、/var/tmp 和/usr/tmp,按此顺序排列。
- 作为最后的手段,当前工作目录。
来自 mac os 的示例:
/var/folders/4x/2rjwjpyn1pn9_0t1r5_m8blr0000gn/T/storage.data
当您通过查找器转到目录时,文件应该在那里。至于Windows,它可能是隐藏的,我相信你可以解锁。
【解决方案3】:
目前没有正在创建的文件。查看tempfile documentation,了解更多关于模块功能的信息,例如.gettempdir():
Python 搜索一个标准的目录列表来找到一个
调用用户可以在其中创建文件。列表是:
由 TMPDIR 环境变量命名的目录。
由 TEMP 环境变量命名的目录。
TMP 环境变量命名的目录。
特定于平台的位置:
在 Windows 上,目录 C:\TEMP、C:\TMP、\TEMP 和 \TMP 按此顺序排列。
在所有其他平台上,目录 /tmp、/var/tmp 和 /usr/tmp 按此顺序排列。
作为最后的手段,当前工作目录。