質問するログイン新規登録
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2465閲覧

Pythonを用いたAndroidへの読み込み、書き込み

hironn

総合スコア3

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/18 04:21

0

0

前提・実現したいこと

Pythonを用いたファイルのバックアップ用のプログラムを作成しています。
tkinter を GUI として使い、エクスプローラーを通してファイルのパスを取得、
shutill の copy2 を用いてファイルのバックアップをしています。

発生している問題・エラーメッセージ

tkinter経由でエクスプローラーを起動したとき、Androidが表示されない
(通常のエクスプローラーでは表示される)
また、Androidのディレクトリを指定して実行してもコピーされない(エラーメッセージはなし)

該当のソースコード

Python

1import pathlib 2import os 3import shutil 4 5class ReadFile(): 6 def __init__(self, path: str) -> None: 7 """指定されたディレクトリに含まれるすべてのファイルとディレクトリを再帰的に取得する 8 9 Args: 10 path (str): ディレクトリのパス、絶対パス 11 """ 12 self.path = path 13 self.file = pathlib.Path(self.path) 14 self.files = [] 15 self.directories = [] 16 self.read() 17 18 def read(self) -> None: 19 self.files = [(i, i.stat().st_mtime) 20 for i in self.file.glob('**/*') if i.is_file()] 21 self.directories = [i for i in self.file.glob('**') if i.is_dir()] 22 23 24class MoveFile(): 25 def __init__(self, start: str, end: str) -> None: 26 """バックアップをする。 27 28 ディレクトリが存在するかどうかを判定してから、 29 ファイルの変更日時を比較してファイルのバックアップをする。 30 31 Args: 32 start (str): _description_ 33 end (str): _description_ 34 """ 35 self.start = ReadFile(start) 36 self.end = ReadFile(end) 37 38 self.enddic = {str(i[0]).replace(self.end.path, ''): i[1] for i in self.end.files} 39 40 self.enddirs = {str(i).replace(self.end.path, '') 41 for i in self.end.directories} # endのdirectoryのset 42 self.move() 43 44 def move(self): 45 for i in self.start.directories: 46 os.makedirs(self.end.path + 47 str(i).replace(self.start.path, ''), exist_ok=True) 48 for ip, f in self.start.files: 49 ip = str(ip).replace(self.start.path, '') 50 if ip not in self.enddic: 51 shutil.copy2(self.start.path + ip, self.end.path + ip) 52 elif f > self.enddic[ip]: 53 shutil.copy2(self.start.path + ip, self.end.path + ip)

このプログラムをGUIのプログラムに読み込ませてWindows上で実行しています。
また、GUIの方ではtkinter.filedialogを使っています。

調べたこと

違うディレクトリを指定すると正しく動いたので、このプログラムが悪いわけではなさそう。
コピー先、コピー元のディレクトリには同名のファイルやディレクトリは存在しなかった。

PythonのWindowsにおけるファイルへのアクセス権限あたりを調べてみたが、少なくともすべてのファイルに対して権限があることがわかった(正しいかどうかはわからない)

Android側の設定等をいじれば行けそうだが、Androidに対する知識がないのでわからなかった。

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

PCのOS:Windows 10
Python3.10.1
スマホのOS:Android バージョン11
スマホのモデル名:Galaxy A41

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

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

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

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

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

guest

回答1

0

ベストアンサー

あまり自信がなかったので様子を見ていましたが、回答がないようなので。
自信がないので、あまり鵜呑みにしてほしくはありませんが、それを念頭に読んでください。

android端末をWindowsPCに接続した際、ファイル転送の方法として、

  • PTP(あまりよく知りません。ただ、軽く調べた感じでは、以下の説明はMTPと同様かと思います)
  • MTP
  • USBマスストレージクラス(MSC)

などがあります。
どの方法が使えるかは端末によって違っていて、端末によっては接続した時点でAndroid側で選択することがあります。

https://aprico-media.com/posts/4715#head-d90dc5f1171165507c1423c5a30bed8a

最近の機種は、MSCに対応したものはあまり見かけません。
MSCは、USBメモリやSDカード、USBのハードディスクなどで使用されているものです。つまり、この方法で接続した場合、USBメモリなどのように普通のファイルアクセスが可能です。

それに対して、MTPは元々音楽プレイヤーなどでファイル転送に使われていたものであり、通常のファイルシステムとは別のものです。
通常のファイルアクセスはできません。

というわけで、回答は「できません」ということになるのですが、もしあがいてみるならば、

  • pythonでmtpを使えるモジュールを探してみる。
  • エクスプローラで見れるのだから、シェルエクステンションでアクセスできるかもしれないので、pywin32を使ってみる(ただし、シェルエクステンションの知識が必要になると思うので、すごく大変だと思います)

ぐらいの手はあるかと思います。
(もちろん、他にも手があるかもしれません)

投稿2022/02/21 00:20

katsuko

総合スコア3605

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

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

hironn

2022/03/08 07:12

返答が遅くなっていまい申し訳ありません。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問