Bio Technical フォーラム

  • バイオ関連の実験をする上での、試薬、機器、プロトコールなどの情報交換の場です。
  • 新しいテーマで話を始める場合、質問をする場合は「新しいトピックを作る」から書き込みをしてください。
  • 質問に対して解答できる方は是非、書き込んで下さい。
  • このフォーラムにふさわしくないと管理人が判断した投稿は予告なく削除します。

新しいトピックを作る | トピック一覧 | 研究留学ネットに戻る

ひとつ前のフォーラム(readのみ)

このスレッドをはてなブックマークに追加このスレッドをはてなブックマークに追加

ImageJでJythonを使ったzipファイルの解凍。 トピック削除
No.9376-TOPIC - 2020/12/16 (水) 21:42:04 - Daniel
### 前提・実現したいこと
ImageJという画像解析ソフトを使っている関係で、やむを得ずPython2.7(Jython)でコードを書いています。

Python2.7でzipファイルを解凍したいのですが、する事ができません。

OutletHDDというフォルダーにRoiSet.zipというzipファイルがあり、それをhogeというフォルダーに解凍したいです。
### 発生している問題・エラーメッセージ
```
TypeError: character mapping must return integer, None or unicode
```

### 該当のソースコード
```Python2
import zipfile
from ij.plugin.frame import RoiManager
from ij.process import ImageProcessor
zippath = "C:\Users\For Programming\Documents\Python Scripts\OutletHDD\RoiSet.zip"


ZipObj = zipfile.ZipFile(zippath)
ZipObj.extractall("C:\Users\For Programming\Documents\Python Scripts\OutletHDD\hoge") #Zipファイルを解凍して移動
ZipObj.close()
```

### 試したこと
unicode型,str型のバグかと思い、str(),unicode()等を行ってみたいのですが、上手く動きませんでした。

### 補足情報(FW/ツールのバージョンなど)
2.7.2 (v2.7.2:925a3cc3b49d, Mar 21 2020, 10:12:24)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)]
 
- このトピックにメッセージを投稿する -



18件 ( 1 〜 18 )  前 | 次  1/ 1. /1


(無題) 削除/引用
No.9376-25 - 2020/12/21 (月) 16:40:52 - G25
プログラミングとかの知識はまったくないのですが、

> ディレクトリ名やファイル名にMacでは大丈夫で、Windowsではだめなものが混じっているのではないのでしょうか。pathの長さもwindowsでは制限があるようですし。

それはあるようです。
たまたま別のトピでもコメントする機会がありましたが、

MacでもWinでもファイルシステムは半角英数でできているところに、
日本語表示はなにかパッチをあてて、偽装的にやってるみたいです。
自分で作ったファイルやディレクトリはさておき、システム組込みのディレクトリは半角英数で書き直すことはできないのか、表示に関わらず、システムの内部処理では、例えば「ユーザ」「user」、「デスクトップ」は「Desktop」になっています。コマンドラインからlist/directory表示するともろ見えです。

その偽装表示の方式の違いがあるようで、windowsではしばしば日本語が含まれるpathによる外国製ソフトの不具合にぶつかります。
自分で作ったファイル、フォルダに日本語文字を入れないようにしても、内部的にはUserフォルダでも日本語表示されている場合に引っかかるみたいです。
ルートディレクトリ直下に、そのソフト専用の半角英数でディレクトリを作ってその下に必要なリソースを置いてみるとか、

(無題) 削除/引用
No.9376-24 - 2020/12/21 (月) 10:07:28 - wwn
すみません、間違えてエンターキーを押してしまいました。。。
ディレクトリ名やファイル名にMacでは大丈夫で、Windowsではだめなものが混じっているのではないのでしょうか。pathの長さもwindowsでは制限があるようですし。

ディレクトリ名ファイル名 削除/引用
No.9376-23 - 2020/12/21 (月) 10:05:32 - wwn

(無題) 削除/引用
No.9376-22 - 2020/12/17 (木) 17:22:31 - s
たろーさんとは逆に、ラボにあったSurfaceで試したらDanielさんの問題が再現してしまった。なんだか全然わからないですね。お役にたてずすみません。

(無題) 削除/引用
No.9376-21 - 2020/12/17 (木) 17:13:51 - Daniel
>[Re:20] たろーさんは書きました :
> うーん、私の環境だとpython2系でzipの中身にunicodeの名前のファイルを混ぜても文字化けしましたが解凍自体はワークしてしまいました。。 
> おそらくパス名の問題な気がするのですが、これ以上はよくわかりません。いろいろやってもらったのにすみません。
>

気を使わせてしまって申し訳ないです...

コロナの状況下で、今ちょっと研究室にいけてないので別機で検証できないのが痛いです...

解決したら、報告します。

本当にありがとうございました。

(無題) 削除/引用
No.9376-20 - 2020/12/17 (木) 16:47:20 - たろー
うーん、私の環境だとpython2系でzipの中身にunicodeの名前のファイルを混ぜても文字化けしましたが解凍自体はワークしてしまいました。。 
おそらくパス名の問題な気がするのですが、これ以上はよくわかりません。いろいろやってもらったのにすみません。

(無題) 削除/引用
No.9376-19 - 2020/12/17 (木) 15:04:38 - Daniel
たろーさん、返信ありがとうございます。

フォルダ名、ファイル名を変えてみる、\\に変えてみる等を行ってみたのですが、エラーコード自体は変わらずでした。

まだ、実装できていないので、なんとも言えないのですがこのzipフォルダーに入っているroiファイルの文字コードを調べてみた所、全てUnicode型でした。

Python2系のzipfileライブラリに関するバグ?仕様?でこの様なものがあったので、https://bugs.python.org/msg186264 もしかしたら、フォルダーパス、ファイルパスがunicide型で書かれているのがバグの原因かもしれないです。

よろしくお願いします。

(無題) 削除/引用
No.9376-18 - 2020/12/17 (木) 13:36:28 - たろー
import zipfile
from ij.plugin.frame import RoiManager
from ij.process import ImageProcessor
zippath = "C:\\Users\\For Programming\\Documents\\Python Scripts\\OutletHDD\\RoiSet.zip"


ZipObj = zipfile.ZipFile(zippath)
ZipObj.extractall("C:\\Users\\For Programming\\Documents\\Python Scripts\\OutletHDD\\hoge") #Zipファイルを解凍して移動
ZipObj.close()

(無題) 削除/引用
No.9376-14 - 2020/12/17 (木) 13:25:00 - たろー
度々すみません、
\をすべて、\\にしてみたらどうなりますでしょうか。
\Uがユニコードエスケープとして認識されているかもしれません。

(無題) 削除/引用
No.9376-11 - 2020/12/17 (木) 12:41:43 - たろー
ありがとうございます。たまに対象のファイル名やフォルダ名でやられたりしますが、そちらは大丈夫でしょうか。For Programmingのスペースとか。

(無題) 削除/引用
No.9376-10 - 2020/12/17 (木) 12:39:48 - Daniel
<追記>
path周りの環境を疑い、同じ標準ライブラリであるshuntil系のcopyやmoveを試してみたのですが、こちらは問題なく動作しました。

今回、解凍しようとしていたzipファイルの中身はroiファイル(.roi)という特殊なファイル形式なのですが、他のファイル形式(例えばtxt)では問題無く解凍する事ができました。(python3.7でroiファイルの解凍も問題なくできました)

原因を断定する事はまだできていないのですが、Pythonのzipライブラリがroiファイルに対応していない、Jythonの不具合の様な気がします。(手元にwindows10 64のノートPCが一台しかなく検証しきれていませんが、自信の環境の可能性もありえます。)

(無題) 削除/引用
No.9376-9 - 2020/12/17 (木) 12:33:37 - Daniel
たろーさん 返信ありがとうございます。

このサイト(https://ao-system.net/doublecharcheck/)で全角判定を行った後、日本語を全部消し、バックスラッシュに書き換えたのですが、エラーコードは変わりませんでした。

(無題) 削除/引用
No.9376-8 - 2020/12/17 (木) 11:23:38 - たろー
スクリプト中の日本語を全部消して、全角スペースがないか確認して、¥をバックスラッシュに変えてみたらどうなりますでしょうか。

(無題) 削除/引用
No.9376-7 - 2020/12/17 (木) 11:05:35 - Daniel
qqさん返信ありがとうございます。

ここには詳細に書いていなかったのですが、大まかに実装したい事の方向性として
【Zipファイルを解凍する → 各々のROIファイルのフルパスを習得する → スクリプトの処理によって特定のフォルダーに変更】するという実装内容です。

確かにマクロスクリプトのこんな感じでも実装は出来なくはないので、やってみます。
roiManager("Save", "C:/Users/For Programming/Documents/Python Scripts/OutletHDD/0001-1802.roi");

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

(無題) 削除/引用
No.9376-6 - 2020/12/17 (木) 11:00:24 - Daniel
sさん返答ありがとうございます。

Mac上では動くんですね... 今手元にノートPCが一台しかないので検証できないのですが、windows10 64bit 上で動かない可能性とかって何か考えられたりしますか?

最後はシェルスクリプトで動かしてみます。

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

(無題) 削除/引用
No.9376-5 - 2020/12/17 (木) 09:18:57 - s
Mac上のFijiではそのpythonコードで問題なく動くようです。

2.7.2 (v2.7.2:925a3cc3b49d, Mar 21 2020, 10:12:24)
[OpenJDK 64-Bit Server VM (Oracle Corporation)]

どうしてもだめなら、そこだけシェルを呼ぶとか。

(無題) 削除/引用
No.9376-2 - 2020/12/17 (木) 09:01:25 - qq
ImageJ のmacroで
open('path to RoiSet.zip')
と、するとRoiManagerにオープンされますが、それでは不十分でしょうか?

ImageJでJythonを使ったzipファイルの解凍。 削除/引用
No.9376-1 - 2020/12/16 (水) 21:42:04 - Daniel
### 前提・実現したいこと
ImageJという画像解析ソフトを使っている関係で、やむを得ずPython2.7(Jython)でコードを書いています。

Python2.7でzipファイルを解凍したいのですが、する事ができません。

OutletHDDというフォルダーにRoiSet.zipというzipファイルがあり、それをhogeというフォルダーに解凍したいです。
### 発生している問題・エラーメッセージ
```
TypeError: character mapping must return integer, None or unicode
```

### 該当のソースコード
```Python2
import zipfile
from ij.plugin.frame import RoiManager
from ij.process import ImageProcessor
zippath = "C:\Users\For Programming\Documents\Python Scripts\OutletHDD\RoiSet.zip"


ZipObj = zipfile.ZipFile(zippath)
ZipObj.extractall("C:\Users\For Programming\Documents\Python Scripts\OutletHDD\hoge") #Zipファイルを解凍して移動
ZipObj.close()
```

### 試したこと
unicode型,str型のバグかと思い、str(),unicode()等を行ってみたいのですが、上手く動きませんでした。

### 補足情報(FW/ツールのバージョンなど)
2.7.2 (v2.7.2:925a3cc3b49d, Mar 21 2020, 10:12:24)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)]

18件 ( 1 〜 18 )  前 | 次  1/ 1. /1


パスワードを入力してチェックした記事を チェックした記事を

このトピックにメッセージを投稿する
名前 
メール   アドレス非公開
   タイトル 
本文      
設定  クッキーを保存(次回の入力の手間を省けます)
上に上げない(トピックの一覧で一番上に移動させません)
解決(問題が解決した際にチェックしてください)
暗証  半角英数字8-12文字の暗証番号を入れると、あとで削除、修正ができます。
送信 

〔使い方〕
  • 「アドレス非公開」をチェックすれば、自分のメールアドレスを公開しないで他の方からメールを受け取れます。
  • 問題が解決した際には、解決ボタンをチェックして解決した旨のコメントをつけてください。これは、初めにトピックを作った人と管理人のみが可能です。
  • 半角カタカナ、機種依存文字(全角ローマ数字、○の中の数字等)は文字化けの原因となりますので使わないでください。