tempfile路径返回int python3

时间:2018-05-01 00:31:36

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

我想知道是否有办法找到临时文件的路径而不返回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完全不同。谢谢你可能回答这个问题。请记住,我不是在寻找确认这是一个问题,我已经知道了。请尽快给我一个问题的答案。 谢谢!

-User 9311010

1 个答案:

答案 0 :(得分:0)

tempfile.TemporaryFile的重点是 没有该文件的名称,如果可能的话:

  

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

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

  

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

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