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 ですが、何が欠けていますか? 目的は、特定のディレクトリ内のファイルを反復処理することです。この 2 番目のエラーをグーグルで検索すると、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

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

これで、コードは両方のプラットフォームで動作します。パスのタイプを指定しています...クロスプラットフォームにしたい場合は、「PosixPath」ではなく「パス」を使用する必要があります

于 2015-05-20T22:07:34.183 に答える
1

試す

for pth in dir_.iterdir():

関連ドキュメントはこちら: https://docs.python.org/3/library/pathlib.html#pathlib.Path.iterdir

于 2014-05-21T12:02:26.343 に答える
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)

この機能はメールの内容でもあり、添付ファイルがリストに含まれている必要があります。(ファイルが 1 つしかない場合でも)。

結論として、多くの問題を回避できるリストに常に文字列を挿入するようにしてください。

于 2018-06-10T15:06:39.390 に答える