【问题标题】:Tempfile path returning int python3返回 int python3 的临时文件路径
【发布时间】:2018-05-01 00:31:35
【问题描述】:

我想知道是否有办法找到临时文件的路径而不返回 int(在我的情况下为 15)。我想返回一个字符串(或一个对象,然后我可以在其中变成一个,请详细说明如何)路径是临时文件的路径(及其名称)。示例:/Users/FooBar/Python3.6/Modules/TempFile/Opus/THE_TEMP_FILE 或类似的东西。我已经为它编写了一个小的 .wav 文件,并希望使用 os .stat() 获取路径以获取它的播放时间/持续时间。我想使用一个临时文件,因为我很懒,而且我不想为我试图在这个程序上运行的四种不同的操作系统做很多“特殊”代码。这是我的代码:

import pygame, time, os, tempfile
import urllib.request as ur

pygame.init() # Initialize the pygame
DISPLAYSURF = pygame.display.set_mode((1, 1)) # Sets display. Needed to play sound

sound = input('What sound should play: ') # Asks which sound
url = 'http://207.224.195.43:8000/' + sound # Gets server url
response = ur.urlopen(url) # Open url
data = response.read() # Create byte like object containing .wav code
f = tempfile.TemporaryFile() # Create TempFile
f.write(data) # Write .wav data gotten from server

f.seek(0) # Prepare to read it
soundObj = pygame.mixer.Sound(f.read()) # Load sound to be played
f.seek(0) # Prepare to read it
statbuf = os.stat(f.name) # Gets stats from TempFile. Returns int, I want to fix that
mbytes = statbuf.st_size / 1024 # Gets 'not real' sound duration
soundObj.play() # Plays sounds
time.sleep(mbytes / 200) # Gets 'real' sound duration and waits
soundObj.stop() # Stops sounds once done

如果您有任何建议,请告诉我(评论)。我查看了几个站点,其中一个是关于堆栈溢出的,您可能会误认为是这个问题的重复。这是关于 Django 的,据我所知,它与 python 完全不同。感谢您可能回答这个问题。请记住,我不是在寻找关于这是一个问题的确认,我已经知道了。请尽快给我一个可能的答案。 谢谢!

-用户9311010

【问题讨论】:

  • (1) Django 与 Python 并不完全不同;它是一个用 Python 编写并用于 Python 代码的框架。 (2) 只是说你看过其他可能看起来像重复的答案是没有帮助的。告诉我们哪些答案。否则,有人很可能会错误地关闭您的问题作为其中一个问题的副本,或者给出对您不起作用的相同答案,因为没有人有任何方式猜测您已经尝试过该答案。

标签: python python-3.x temporary-files


【解决方案1】:

tempfile.TemporaryFile 的全部意义在于 没有文件名,如果可能的话:

... 在 Unix 下,文件的目录条目要么根本不创建,要么在文件创建后立即删除。其他平台不支持;您的代码不应依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见名称。

如果您想要一个具有可访问文件名的临时文件,请使用NamedTemporaryFile

此函数的操作方式与TemporaryFile() 完全相同,只是保证文件在文件系统中具有可见的名称……可以从返回的类文件对象的名称属性中检索该名称。


但是,我认为您首先不需要文件名。你只想要一个,所以你有东西可以传递给stat吗?在 Python 3.3+ 中,您可以将文件对象(如 f)传递给 stat 而不是其名称。在旧版本中,您可以将 fstat 与文件的描述符 (fileno()) 一起使用。

【讨论】:

  • 我只希望它用于os.stat()'. Could you give an example of using tempfile.TemporaryFile()` 还是太多了?
  • @user9311010 您只需致电os.stat(f)。除非您使用的是 Python 3.2,否则您使用 os.fstat(f.fileno())
猜你喜欢
  • 2012-04-11
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多