私はいくつかのPerlの行をPythonに変更しようとしています。私はperlコードで何が起こっているのかを理解するのに苦労しています 。どんな助けでも大歓迎です。perl正規表現をPythonに変換する
ありがとうございました!
my($junk1, $filename, $junk2) = $mydir =~ m/(.*\\)(.*\\)(.*)/;
$filename =~ s/\\//;
print $out $filename, "\n";
私はいくつかのPerlの行をPythonに変更しようとしています。私はperlコードで何が起こっているのかを理解するのに苦労しています 。どんな助けでも大歓迎です。perl正規表現をPythonに変換する
ありがとうございました!
my($junk1, $filename, $junk2) = $mydir =~ m/(.*\\)(.*\\)(.*)/;
$filename =~ s/\\//;
print $out $filename, "\n";
3つの成分に$mydir
は、最初の二つはバックスラッシュで終わるm/(.*\\)(.*\\)(.*)/
分割の最初の行(例えば
$mydir
がAsdf\fdsa\jkl
た場合、最初の行は$junk2 = jkl
。
$filename = fdsa\
、
$junk1 = Asdf\
設定します
ライン
$filename =~ s/\\//;
は$filename
(fdsa\
)をとり、最後のバックスラッシュ(構文はs/stuff_to_match/stuff_to_substitute_with/
)を削除します。
re
moduleを使って正規表現の処理を行うことができます。この場合は、バックスラッシュで分割して正規表現の必要性を排除するように見えます。
ありがとうございました。これは非常に便利です。 – inbinder
my($junk1, $filename, $junk2) = $mydir =~ m/(.*\\)(.*\\)(.*)/;
これはどちらか(間違って)ファイル名を取得しようとしたり、実際には、ターゲット・ファイルの入ったフォルダを取得します。
$filename =~ s/\\//;
任意の先頭または末尾のパス区切りを削除します。それは正規表現の成功または失敗をチェックしないので、Perl BTWは良く書かれていません。
ので、これが結果です:
my $mydir="c:\\music\\ap\\mahadeva.mp3";
my($junk1, $filename, $junk2) = $mydir =~ m/(.*\\)(.*\\)(.*)/;
$filename =~ s/\\//;
print $filename, "\n";
プリント:ap
Pythonの再への直訳は、次のとおりです。
まあimport re
mydir="c:\\music\\ap\\mahadeva.mp3"
m=re.search(r'(.*\\)(.*\\)(.*)', mydir)
if m:
print re.sub(r'\\', '', m.group(2))
ないPERFECT翻訳、Pythonのチェックので、一致するとPerlのバージョンはありません。
Pythonでこれを行う方法はずっと簡単です(それはPerlです)。
print p.split('\\') # ['c:', 'music', 'ap', 'mahadeva.mp3']
print p.split('\\')[-2] # prints 'ap'
ファイルパスを切り詰めるために正規表現を使用しないでください。
代わりにos.path
moduleと文字列関数を使用してください。特に、os.path
モジュールは、オペレーティングシステム(ディレクトリセパレータ - unix /
とwindows \\
など)の違いを多く占めています。これにより、コードが異なるコンピュータで動作する可能性が高まります。
>>> mypath = "D:\\lws\\vc\\.git\\objects\\dd"
>>> mydir = os.path.dirname(mypath)
>>> mydir
'D:\\lws\\vc\\.git\\objects'
>>> dirs = mydir.split(os.path.sep) # On windows, os.path.sep is `\\`.
>>> dirs
['D:', 'lws', 'vc', '.git', 'objects']
>>> dirs[0:2]
['D:', 'lws']
>>> filename = os.path.basename(mypath)
>>> filename
'dd'
私は最初の「$ MYDIR」とどのようにこれは痛いです正規表現 – inbinder
でフォーマット/解析することができるように、それがその後、渡されたのは明らかではありませんよ。 \t \t return args.pop(0) – inbinder
私はこれに私のアプローチを再考し、より多くの利点を得る必要があると考え始めています。これは私のmydir = shift @ARGVdef pop_func(* args)私が真っ直ぐな港の代わりに私の処分でパイソンを持っているという事実のことです。 – inbinder