我正在尝试根据我的(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
答案 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)
此功能也是电子邮件的内容,附件必须在列表中! (即使只有一个文件)。
总之:总是尝试将字符串插入到可以节省很多问题的列表中。