ショック! u202aエラー、ファイルパスに隠された衝撃的な秘密の90%が不明です! (乾物回収)



Shock U202a Error 90 Shocking Secrets Hidden File Path Are Unknown



目次

今日、Pythonファイル処理を行っているときにこのような問題が発生しました。

マウスの右ボタンを使用してファイルパスを取得して使用すると、常にエラーが発生し、ファイルパスの読み取りに失敗します。



画像
次にインターネットを調べたところ、多くの友人が同様の問題を経験しており、オンラインでの回答もたくさんありますが、ほとんどの場合、パス文字列の前にrを追加すると元の文字列になるか、手動でパス文字列を入力して解決すると言われています。

以下は、すでにオンラインで利用可能ないくつかの方法に従った大きな悪いオオカミによる試みです。



試行1:コピーされたパスの前にrを追加して、元の文字列にします。

#File path modified to original string import shutil import os.path as op path1 = r'D:datavenv est.txt' #Path copied directly from the folder path2 = r'D:data.idea' #Path copied directly from the folder shutil.copy(path1, path2)

上記のコードに示されているように、コピーされたファイルパスの前にrを追加して元の文字列にした後、実行結果に変更はなく、このエラーは引き続き表示されます。

画像

試行2:ファイルパスを手動で入力します

その後、Big Bad Wolfは手動で文字を入力し、文字列の前にrを使用し、rを使用しませんでした。



ファイルパスを手動で入力すると、パスが元の文字列に変更されていなくても、プログラムを実行できることがわかります。

#File path manual input import shutil import os.path as op path1 = r'D:datavenv est.txt' #Handwritten path path2 = r'D:data.idea' #Handwritten path shutil.copy(path1, path2)

演算結果:

画像

しかし、前後の2つのコードを注意深く比較する小さなパートナーがわかります。

ファイルパスの1つがコピーされ、もう1つが手動で入力されることを除いて、コードに違いはありませんが、これら2つのコードは手動で入力して実行できますが、コピーされたパスは実行できません。

これは非常に紛らわしいです。まったく同じように見えるのは明らかに2つのコードです。走った後、なぜそんな違いがあるのですか?

試行3:ファイルパスの分割

そこで、コピーしたファイルのパスを分割して比較しました。 この比較は悪いです!

コードは次のようになります。

#File path division import shutil import os.path as op path1 = r'D:datavenv est.txt' #Path copied directly from the folder path2 = r'D:data.idea' #Path copied directly from the folder print(path1.split('\')) print(path2) shutil.copy(path1, path2)

2つのパス文字列をコピーします。最初のパス文字列はバックスラッシュ付きのリスト形式に分割され、2番目のパス文字列は処理なしで直接出力されます。操作の結果は次のとおりです。

画像
未処理パスを出力したところ、異常はありませんでしたが、バックスラッシュ分割処理後のパスが異なります。 ファイルパスの最前線に u202aが登場!

その時、私もとても混乱していました...

コードからわかるように、ファイルパスの文字列に u202aはありませんが、 u202aは分割リストに表示されますが、2番目のパスもコピーされたパスであり、処理せずに直接出力されます。 、ただし、 u202aの文字列は表示されません。

この瞬間、大きな悪いオオカミも冷や汗をかいていた…これは伝説の不思議な u202aキャラクターですか?

画像

真実が明かされる!

u202aについての不可解な好奇心で、私はDuNiangに尋ねる長い旅に乗り出しました。

いいやつ、チェックしないかわからない。

キャラクター u202aは常に存在し、人間の肉眼には孫悟空の魔法の力がなく、単純な出力だけではこのキャラクターを元の形に見せることはできません。

ただし、ファイルを右クリックしてパスをコピーすると、クリップボードに文字 u202aが既に存在しますが、貼り付けても表示されないことは否定できません。

画像
さらに驚くべきことは、右クリックしてファイルパスをコピーするたびにこの文字が表示されないことです。

右から左にコピーした場合にのみ u202aが表示され、左から右にコピーした場合はこの文字は表示されません。

画像

うーん...そしてこの神の操作...

画像
これを見て、私たち人間と比較して、私は u202aの謎について少し知っています。

そうです、通常ファイルパスを読み取るときは、ファイル/フォルダー/特定のディスクではなく、特定のディスク/フォルダー/ファイルの順に左から右に読み取ります。

しかし、ファイルのコピーパスを右クリックすると、必然的に左または右からコピーが開始されるため、コンピュータでは、パスを右から左にコピーするために、読んでいるときに左から右に読むことができます。取られると、 u202aはファイルパスの前に暗黙的に追加され、パスが左から右に読み取られることを示します。

したがって、この記号は、Windowsがファイル名を表示しているときにファイルパスが左から右に表示されるようにするために、必須の文字を追加する必要があります。

u202aが存在する理由がわかったので、次のステップは、ファイルパスをコピーしてプログラムで使用した後、この非表示の文字列を削除する方法です。

試行4:normpath()関数処理パス

大きな悪いオオカミは、os.pathパッケージのnormpath()関数を使用して解決できることもインターネットで確認しています。

これがnormpath()関数の役割の説明です:パスを正規化します:余分なセパレーターを削除し、回します。そして…実際のパスに移動し、間違ったスラッシュを処理します。

少し便利に聞こえたので、Big Bad Wolfは、動作する場合に備えて、normpath()関数で疑問を持って試してみました。

また、normpath()関数がファイルパスを正規化できるかどうかをより直感的に確認するために、Big Bad Wolfはnormpath()関数によって処理される2つのファイルパスを分割および分割解除します。コードは次のとおりです。

#normpath() function processing import shutil import os.path as op path1 = op.normpath(r'D:datavenv est.txt') #Path copied directly from the folder path2 = op.normpath(r'D:data.idea') #Path copied directly from the folder print(path1.split('\')) # Separate path 1 with a backslash as a list output print(path2) shutil.copy(path1, path2)

ご想像のとおり、normpath()関数はファイルパスを変更せず、分割の出力結果には u202aがまだ存在します。

画像

これで結構です。インターネットで多くの方法を試しましたが、それでも u202aのファイルパスの問題を解決できません。

しかし、キーボードを押してコードを書きたくない私のようなプログラマーにとって、ファイルパスを手動で何度も入力したり、パスを何度も変更したりすることができるので、このような魔法の操作があります。 ..。。

問題を処理する関数を定義します

そのとおり!もっと怠惰になるために、私はそのような処理関数を書きました。関数が受け取る変数はファイルパス、つまりファイル属性からコピーしたファイルパスです。この関数の処理後、に戻ることができます。プログラムは u202aのない通常のパスを使用します。

また、スラッシュを使用して接続し、バックスラッシュによるエスケープ文字エラーは発生しません。

私のコードの効果は次のとおりです。

#Function processing import shutil import os.path as op path1 = 'D:dmppathTest.txt' #Path copied directly from the folder path2 = 'D:dmpdeposit' #Path copied directly from the folder '''Standardize the path from the responsible path''' def path_normal(path): path = path.split('\') path[0] = path[0][-2: len(path[0])] path = '/'.join(path) return path print('Before conversion:' + path1) print('Split into lists:') print(path1.split('\')) path1 = path_normal(path1) #Call function for path conversion print('After conversion:' + path1) print('Split into lists:') print(path1.split('/')) path2 = path_normal(path2) shutil.copy(path1, path2) #Copy files and folders

演算結果:

画像
この関数で処理されたファイルパスを再びスラッシュで割った後、 u202aの文字列は表示されず、ファイル処理関数に直接適用してもエラーは報告されないことがわかります。

関数は比較的単純で、ファイルパスの前に表示されない u202aを4行のコードで区切るだけで、より実用的です。

この関数を使用する方法は、処理が必要なファイルパスを渡し、処理された通常のパスを返すことであり、それを受信することによってのみ使用できます。

パス正規化処理機能

関数のコードは次のとおりです。

#Path standardization processing '''Standardize the path from the responsible path''' def path_normal(path): path = path.split('\') path[0] = path[0][-2: len(path[0])] path = '/'.join(path) return path

これで、ファイルパスエラーをコピーする理由と処理方法を簡単に理解できたはずです。これは比較的単純ですが、実際、多くのプログラムでよく見落とされがちなエラーです。後で使用するために保存してください。

それが良いと思うなら、それを好きでフォローすることを忘れないでください。
同時に、私のWeChatパブリックアカウント「GreyWolfDongzhu」をフォローして、Pythonプロジェクトの共有とインターネット情報をさらに楽しむこともできます。
大きな悪いオオカミはあなたと一緒に進歩することを楽しみにしています!