如何从写入strem对象中检索文件名

时间:2013-08-18 11:36:37

标签: python file-io

我有一个关于文件字符串操作的简单问题。

我已经编写了一些代码,最终除了最终消息之外还有效。为了便于解释,请查看下面我的代码的简化版本。

outStream = "/Users/andreamoro/Desktop/domains_output.csv"

try:
    outStream = open(outStream, "w")
    ...
    do something
except:
    ....
else:
    print "A new output file %s has been created." %os.path.basename(outStream)

我想要的输出应该只是文件名...而是我得到一个像这样的例外

文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py”,第121行,以basename     i = p.rfind('/')+ 1 AttributeError:'file'对象没有属性'rfind'

我当然使用了错误的方法,我不能指望将文件类型转换为字符串。我很惊讶没有一种方法只返回文件名,如果它存在,我无法找到它。

你能指出正确的方向吗?

由于

2 个答案:

答案 0 :(得分:1)

代码中的问题是您将outStream重新分配给文件对象。

outStream = "/Users/andreamoro/Desktop/domains_output.csv"

try:
    outStream = open(outStream, "w")  # now outStream is this

重命名字符串对象或文件对象,您的代码将正常工作。

否则它可以正常工作:

>>> strs = "/Users/andreamoro/Desktop/domains_output.csv"
>>> os.path.basename(strs)
'domains_output.csv'

答案 1 :(得分:0)

outStream变量被重新分配并成为类文件对象:

outStream = open(outStream, "w")

现在,您可以从outStream.name获取文件的名称:

  

名称

     

如果文件对象是使用open()创建的,则为   文件。否则,一些字符串指示文件的来源   对象,形式为“< ...>”。这是一个只读属性,可能不是   存在于所有类文件对象上。   (docs

os.path.basename(outStream.name)  # is equal to 'domains_output.csv'