迭代文件

时间:2014-05-21 11:43:27

标签: python pathlib

我正在尝试根据我的(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的文档并认为是的,我应该能够将PosixPath更改为Path,我会没事的。好吧,然后dir_生成一个WindowsPath对象。到现在为止还挺好。但是,我得到了

TypeError: 'WindowsPath' object is not iterable

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

备注:无法使用pathlib作为标记,因此我将其添加到标题中。

更新

我有Python 2.7.3和pathlib 1.0

5 个答案:

答案 0 :(得分:6)

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

for pth in dir_.iterdir():

    #Do your stuff here

答案 1 :(得分:1)

使用glob模块,它在两个平台上都相同:

import glob
for item in glob.glob('/your/path/*')  # use any mask suitable for you
   print item # prints full file path

答案 2 :(得分:1)

尝试

for pth in dir_.iterdir():

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

答案 3 :(得分:1)

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

现在您的代码可以在两个平台上运行。您正在指定de type of path ...如果您希望它是跨平台的,则必须使用" Path"不是" PosixPath"

答案 4 :(得分: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)

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

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