質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1471閲覧

Python3、文字列の抽出(正規表現)方法に関して教えてください。

bsjbbztqfuzj11

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/21 01:34

前提・実現したいこと

os.path.dirname() で抽出したファイルパスの、任意の部分のみ抽出して変数にしたい。

発生している問題

os.path.dirname() で抽出した下記ファイルパス、 C:\Users\USERPROFILE\Desktop\test1\test2 USERPROFILE 以下の 「Desktop\test1\test2」のみを抽出するには どの様な記述をすれば良いのでしょうか。

試したこと

下記サイトを参考に指定文字列(USERPROFILE)より後ろを抽出、の様なものを探したが理解できなかった。
https://techplay.jp/column/463

記述補法ご存知の方いらっしゃいましたら、ご教授頂けないでしょうか。

補足情報(FW/ツールのバージョンなど)

・ Windows 10
・ Python 3.8.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2020/05/21 01:46

追記して下さい。 ・ 何がどのように理解できなかったのですか? ・ どこまで理解できているのですか? ・ 実際にどんな正規表現を試してみましたか?その結果どうなりましたか? 答えを直接聞いたところで、『難しくて理解できない、でも動く』という状況になるだけな気がします。
ForestSeo

2020/05/21 01:58

別に正規表現使わなくてもよいのでは?
bsjbbztqfuzj11

2020/05/21 02:51

LouiS0616 さんはいつも通りですね。 そこまで理解していたらここで質問する必要も無いと思いますが。。 また、あてずっぽうです、と言いつつ回答してくる人物なので全くあてにしておりません。 申し訳ございません
LouiS0616

2020/05/21 02:58 編集

@bsjbbztqfuzi11 さん プログラミングの初心者であるからと言って、質問の初心者に留まって欲しくは無い。そのような願いでコメントしています。高圧的に感じたのならすみません。 当てずっぽうと書いているときにも、そのように判断した理由はしっかり持っていますし、説明を求められればします。疑問が解消しないときはコメントを頂ければと思います。 私が当てずっぽうと書くときは、だいたい動作検証をしていないときです。誤解を招く表現であるようなので、今後は『動作検証はしていません』と書くこととします。
LouiS0616

2020/05/21 03:08 編集

なお当てずっぽうと直近で答えたのは https://teratail.com/questions/262736 ですが、次のような思考を辿っています。 1. strインスタンスに対してnewpathを要求するのはおかしい。これは打ち間違いなのではないか? 2. "setAttribValue"について検索したところ、関連しそうなリファレンスを見つけた。https://www.sidefx.com/docs/houdini/hom/hou/Point.html 3. setAttribValueは二つの引数をとるようだ。一つ目はname_or_attrib、二つ目は attrib_value である。 4. name_or_attribという仮引数名から、おそらく文字列を渡すのは妥当である。 5. プログラム内で変数new_pathを利用している。本来これを第二引数として渡すべきではないか? --- 当てずっぽうと書いた理由は、次の二つです。 ・ 何に使うライブラリか知らないので、全体像までは把握していない ・ 実際に動作検証はしていないし、環境構築もしていない
bsjbbztqfuzj11

2020/05/21 03:07

利用者全てがプログラミングのプロフェッショナルにならなければいけないのでしょうか? それは貴方の考えなので押し付けないでください。 少し知識があるので初心者への高圧的な態度を取って承認欲求を満たしているだけとしか思えません。 気に入らない質問であれば回答しなければ良いだけの話です。 今後「動作検証はしていません」と記載する と言われましても、私にとっては全く関係ない事なので好きにしてください。
bsjbbztqfuzj11

2020/05/21 03:10

延々とあなたの言い訳の様なものを記載されても全く興味がありません。 質問に関係ない回答なので、削除、または編集してください。 よろしくお願いいたします。
LouiS0616

2020/05/21 03:10

> 利用者全てがプログラミングのプロフェッショナルにならなければいけないのでしょうか? いいえ。『プログラミングの初心者であるからと言って、質問の初心者に留まって欲しくは無い。』と明記したように、それは望んでいません。 質問をする力を付けて欲しいのです。これはプログラマだろうとそうで無かろうと必要なものです。 実際本質問の回答も、bsjbbztqfuzj11さんの真意が見えないので少し探った内容になっています。 質問内容が充分明瞭であればこれは避けられたことです。
LouiS0616

2020/05/21 03:12

本欄は回答欄ではありませんので、質問のブラッシュアップに繋がるコメントの記載は全く問題ありません。 疑問に思うようなのであれば運営に直接問い合わせて下さい。不要と判断されれば削除されるでしょう。
bsjbbztqfuzj11

2020/05/21 03:17

>> 実際本質問の回答も、bsjbbztqfuzj11さんの真意が見えないので少し探った内容になっています。 質問内容が充分明瞭であればこれは避けられたことです。 他の回答も拝見させていただきましたが、雑な回答ですね。 私が他の質問で回答頂いた方と比べるとずいぶん陳腐なものでした。 人にとやかく言う前に回答する力を付けた方が良いのでは?と思いました。 雑な回答して数だけ稼いでる感じですよね? >> 本欄は回答欄ではありませんので、質問のブラッシュアップに繋がるコメントの記載は全く問題ありません。 疑問に思うようなのであれば運営に直接問い合わせて下さい。不要と判断されれば削除されるでしょう。 では、そのままで結構です。 私としては特に興味が無いです。
LouiS0616

2020/05/21 03:34

bsjbbztqfuzj11さんが私の回答にそのような感想を持ったことは分かりました。しかし私自身ある程度質を担保できるよう定量的な自己評価をするようにしているので、現状の方針を変えようとは思っていません。 同様に、私が書いた指摘も私の感想でしかありません。説得力を感じないようであれば、無視して頂いても結構です。 本欄が長くなると本来の指摘事項が埋もれてしまうので、私からのコメントは打ち止めとします。
bsjbbztqfuzj11

2020/05/21 03:39

はい、ご回答ありがとうございました。
Lhankor_Mhy

2020/05/21 05:56

>bsjbbztqfuzj11さん 横からすみません。 LouiS0616さんがおっしゃる「どこまで理解できているのですか?その結果どうなりましたか?」は teratail 公式の「質問するときのヒント」にもある内容です。 何ができていて、何ができていないのか(何がわかっていて、何がわからないのか)を書きましょう https://teratail.com/help/question-tips#questionTips3-5-2 結果(実際に起きたこと)を書きましょう https://teratail.com/help/question-tips#questionTips3-4-1 なので、LouiS0616さんだけではなく、私も含め、多くの質問者と回答者が「質問に記述されていることが望ましい」と共有している内容であることを申し添えておきます。 --- ただ、これは一部の回答者が誤解している部分が多々あると思いますが、「質問するときのヒント」にも、 > ただし、これは決してここに書かれていることを守っていない質問者を責めるためのものではありません。 > このヒントは、質問の仕方のコツがまだ掴めていない方に対して「このポイントを押さえた質問にすればもっと良いコミュニケーションになる」というアドバイスをするためのものです。 とあるとおり、より良いコミュニケーションをする指針ですから、「何ができていて、何ができていないのかが書いてないから規約違反だ!」みたいな書き方をするのは、違うと感じています。(LouiS0616さんのことではありません)
guest

回答2

0

ベストアンサー

ユーザー名が何であろうと

Python

1p = r"C:\Users\USERPROFILE\Desktop\test1\test2" 2p = p[p.find("Desktop"):] 3print(p) 4# Desktop\test1\test2 5```ですね。

投稿2020/05/21 02:53

ForestSeo

総合スコア2722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsjbbztqfuzj11

2020/05/21 02:58

ファイルの保存先、Desktop\test1\test2 がユーザー任せになるので可変になります。 なので、どのように設定したものかと悩んでおります。 具体的なコードを記載していただけたので、一旦ForestSeoさんをベストアンサーとさせていただきます。 ご回答ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/05/21 03:06

ユーザ名が「DesktopPC」さんだったら、というケースはありますけどね。
ForestSeo

2020/05/21 03:18 編集

kichirb3 確かに じゃあ p = "C:/Users/USERPROFILE/Desktop/test1/test2" p = p[p.find("Desktop/"):] print(p) もうバックスラッシュめんどくさいからスラッシュにしてしまえ!
guest

0

なかなかきびしいご意見ですね 

単に「C:\Users\USERPROFILE」の後ろを取りたいだけなら、
固定文字数なので、私なら、「22文字目から最後まで」で切り出します

python3

1>>> getstr='C:¥Users¥USERPROFILE¥Desktop¥test1¥test2' 2>>> print(getstr[21:]) 3Desktop¥test1¥test2

21というマジックナンバーを持たせるのは良くないですから、
len関数で求めないといけませんね。

「任意の部分のみ抽出」をもっと汎用的に指定したいのであれば、
その旨を質問されるといいと思います。

投稿2020/05/21 02:14

taro373

総合スコア189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsjbbztqfuzj11

2020/05/21 02:54

USERPROFILE の部分はそのユーザーの環境に合わせた設定値になってしまうので ○○文字から最後まで、と言うのが設定出来なくて困っております。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問