我一直在尝试将元组传递给我之前创建的函数,但是,我仍然无法使它工作。 我的目标是传递一个包含路径+文件格式列表的元组,我想要发现它的大小并打印出来。
这是我的代码
EXl = ('C:\\vd36e404.vdb','C:\\vd368c03.vdb')
def fileF(EXl):
import os
filesize = os.path.getsize(EXl)
print (filesize);
fileF(EXl)
这些是错误:
Traceback (most recent call last):
File "C:\Documents and Settings\Administrator\workspace\test1py\testcallMyF.py", line 13, in <module>
fileF(EXl)
File "C:\Documents and Settings\Administrator\workspace\test1py\testcallMyF.py", line 9, in fileF
filesize= os.path.getsize(EXl)
File "C:\Python27\lib\genericpath.py", line 49, in getsize
return os.stat(filename).st_size
TypeError: coercing to Unicode: need string or buffer, tuple found
有人可以向我解释原因吗?(我使用的是Python 2.7.2)
答案 0 :(得分:4)
您已成功将元组传递给您自己的函数。但是os.path.getsize()
不接受元组,它只接受单个字符串。
此外,这个问题有点令人困惑,因为你的例子不是路径+文件元组,就像('C:\\', 'vd36e404.vdb')
一样。
要处理类似的事情,你可以这样做:
import os
def fileF(EXl):
filesize= os.path.getsize(EXl[0] + EXl[1])
print (filesize);
如果要打印多个路径的值,请按Bing Hsu说明,并使用for循环。或者使用列表理解:
def fileF(EXl):
filesizes = [os.path.getsize(x) for x in EXl]
print filesizes
或者,如果您想要返回另一个元组:
def fileF(EXl):
return tuple(os.path.getsize(x) for x in EXl)
答案 1 :(得分:3)
import os
for xxx in EXl:
filesize= os.path.getsize(xxx)
print (filesize);
答案 2 :(得分:2)
一种更优雅的例子:
map(fileF, EX1)
这实际上将与EX1中的每个元素分别调用fileF。当然,这相当于
for element in EX1:
fileF(element)
看起来更漂亮。