0

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

我已经编写了一些代码,除了最终消息之外,它最终可以工作。为了我的解释,请在下面查看我的代码的简化版本。

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' object has没有属性“rfind”

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

你能指出正确的方向吗?

谢谢

4

2 回答 2

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'
于 2013-08-18T11:39:35.210 回答
0

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

outStream = open(outStream, "w")

现在您可以从以下位置获取文件名outStream.name

姓名

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

os.path.basename(outStream.name)  # is equal to 'domains_output.csv'
于 2013-08-18T11:44:27.040 回答