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

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

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

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

Q&A

解決済

2回答

2934閲覧

Pythonでファイルを読み込む順番をかえたい

Nats91115796

総合スコア7

Python 3.x

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

0グッド

1クリップ

投稿2019/08/01 05:34

編集2019/08/01 06:43

前提・実現したいこと

Python初心者です。
python(Spyder)でbinaryファイルからデータを取り出す作業をしています。
その際に case1, case2, case3, case4, case5...という順番でファイルの読み込みをしたいのですが、
現在のところ case1, case11...case19, case2, case21...という順番で読み込みをしているようです。
数日前までは希望通りの順番で読み込みをしていたので原因は不明ですが、解決策はありますでしょうか?

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

エラーメッセージ

該当のソースコード

Python

1import os 2os.getcwd 3 4import glob 5import pickle 6 7File=glob.glob('./*.binaryfile') 8File=[os.path.basename(r) for r in File] 9FileNum=len(File) 10Name=[0]*FileNum 11for m in range(0,FileNum): 12 name,ext=os.path.splitext(File[m]) 13 Name[m]=name 14 15 16#以下エラーが出たコード 17import os 18os.getcwd 19 20import glob 21import pickle 22from natsort import natsorted 23 24File=natsorted(glob.glob('./*.binaryfile')) 25File=[os.path.basename(r) for r in File] 26FileNum=len(File) 27Name=[0]*FileNum 28for m in range(0,FileNum): 29 name,ext=os.path.splitext(File[m]) 30 Name[m]=name 31

試したこと

natsortを試してみましたがsyntaxErrorが出てしまいました。
natsortはAnaconda3¥pkgsにインストールされています。

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

Spyder(Python3.6)
ソフトウェアとのリンクの都合上Python3.6を使っています。

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

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

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

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

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

LouiS0616

2019/08/01 05:53

> natsortを試してみましたがsyntaxErrorが出てしまいました。 エラーが出た実際のコードを追記して下さい。
LouiS0616

2019/08/01 06:50

コピペして実行してみましたが、SyntaxErrorは出なそうです。 トレースバックも含めてエラーメッセージを載せてみて下さい。
Nats91115796

2019/08/01 10:58

natsortが別の2か所のファイル内にインストールされていました。 一方を消去したところエラーが出ずにnatsortが使えました。 ありがとうございました。
guest

回答2

0

もともとgrobの結果はファイル名や数字順になる保証はなく不定ですので自力でソートする必要があります。
この場合はHow do you sort files numerically?での回答コードが使えます。

なおnatsortpipによるインストールが必要です。

Python

1import re 2File = ['case1', 'case11', 'case2', 'case21'] 3File.sort(key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)]) 4print(File) # ['case1', 'case2', 'case11', 'case21'] 5 6from natsort import natsorted 7File = natsorted(File) 8print(File) # ['case1', 'case2', 'case11', 'case21']

投稿2019/08/01 05:47

編集2019/08/01 06:12
can110

総合スコア38262

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

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

0

自己解決

natsortが別の2か所のファイル内にインストールされていました。
一方を消去したところエラーが出ずにnatsortが使えました。
回答してくださった方ありがとうございました。

投稿2019/08/01 10:55

Nats91115796

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問