8

我正在尝试为我的(Windows 7)目的调整某人的代码。不幸的是,他是特定于 UNIX 的。他是这样的

dir_ = pathlib.PosixPath(str(somePathVariable))
os.chdir(str(dir_))
for pth in dir_:        
    # some operations here

运行这个,我得到了(并不奇怪)

NotImplementedError: cannot instantiate 'PosixPath' on your system

我查看了文档pathlib并认为是的,我应该能够更改PosixPathPath并且我会没事的。那么,dir_生成一个WindowsPath对象。到目前为止,一切都很好。但是,我得到

TypeError: 'WindowsPath' object is not iterable

pathlib是 1.0 版,我错过了什么?目的是遍历特定目录中的文件。谷歌搜索第二个错误给出了0次点击。

备注:不能pathlib用作标签,所以我把它放在标题中。

更新

我有 Python 2.7.3 和 pathlib 1.0

4

5 回答 5

21

我想你应该使用Path.iterdir().

for pth in dir_.iterdir():

    #Do your stuff here
于 2014-05-21T12:02:11.517 回答
1

尝试

for pth in dir_.iterdir():

此处的相关文档:https ://docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir

于 2014-05-21T12:02:26.343 回答
1

改用glob模块,这在两个平台上都一样:

import glob
for item in glob.glob('/your/path/*')  # use any mask suitable for you
   print item # prints full file path
于 2014-05-21T11:57:48.230 回答
1
dir_ = pathlib.Path(str(somePathVariable))
os.chdir(str(dir_))
for pth in dir_:        
    # some operations here

现在您的代码将在两个平台上运行。您正在指定路径的类型...如果您希望它是跨平台的,则必须使用“Path”而不是“PosixPath”

于 2015-05-20T22:07:34.183 回答
0

重要须知: 每次遇到object is not iterable错误时,必须记住系统也会对字符串执行迭代,例如:

import yagmail

def send_email(to: list, subject: str, content: list, attachments=None):
    yagmail.SMTP(from_user_name, password)\
    .send(to=to, subject=subject, contents=content, attachments=attachments)

这个功能也是邮件的内容,附件必须在列表中!(即使只有一个文件)。

结论:总是尝试将字符串插入到列表中可以节省很多问题。

于 2018-06-10T15:06:39.390 回答