我有一个关于文件字符串操作的简单问题。
我已经编写了一些代码,最终除了最终消息之外还有效。为了便于解释,请查看下面我的代码的简化版本。
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'
我当然使用了错误的方法,我不能指望将文件类型转换为字符串。我很惊讶没有一种方法只返回文件名,如果它存在,我无法找到它。
你能指出正确的方向吗?
由于
答案 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'