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

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

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

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

Python

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

Q&A

解決済

3回答

1342閲覧

pythonでのテキストファイルからのインプット

tera_nsykuh

総合スコア12

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/02/09 01:41

前提・実現したいこと

python初心者です
pythonでtextファイルからのインプットを考えています
"[xxx]"で始まる箇所をsectionとしてsection毎にリストでアウトプットしたいと思っています。

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

flugを用いて,処理を分岐させていますが,シンプルなコードにできませんか?

該当のソースコード

input.py def input(file_input): lines = [line.rstrip() for line in open(file_input)] while "" in lines: lines.remove("") flug = 0 title = [] parameter = [] node = [] element = [] for line in lines: line = line.lower() if line[0:1] == "[": flug = 0 if line == "[title]": flug = 1 if line == "[parameter]": flug = 2 if line == "[node]": flug = 3 if line == "[element]": flug = 4 if flug == 1: title.append(line) if flug == 2: parameter.append(line) if flug == 3: node.append(line) if flug == 4: element.append(line) print(title) print(parameter) print(node) print(element) if __name__ == "__main__": input("test.inp") ------------------------------------ test.inp [Title] test input 2018.02.07 [Parameter] ndim=4 ncal = 5 [Node] test.nod [Element] test.ele [End]

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

セクションをキーとしたデータのリストを辞書で保持する例です。

Python

1import re 2 3# データ読込、空行の除去などなど 4 5lines = ['[hoge]','a','b','[huga]','c','d'] 6dic = {} 7sec = '' 8for line in lines: 9 m = re.match(r"[(\w+)]", line) 10 if m: 11 sec = m.group(1) 12 dic[sec] = [] 13 else: 14 dic[sec].append(line) 15 16print(dic) # {'hoge': ['a', 'b'], 'huga': ['c', 'd']}

投稿2018/02/09 02:16

can110

総合スコア38258

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

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

can110

2018/02/09 02:18

かぶった。。
tera_nsykuh

2018/02/09 02:20

ありがとうございます。 非常にシンプルなコードで,勉強になりました。
guest

0

ベストアンサー

python

1def get_input(filepath): 2 with open(filepath, 'r') as f: 3 lines = [l.rstrip() for l in f.readlines()] 4 results = {} 5 for line in lines: 6 if line.startswith('['): 7 key = line[1:-1].lower() 8 results[key] = [] 9 tlist = results[key] 10 else: 11 if len(line) > 0: 12 tlist.append(line) 13 return results 14 15if __name__ == "__main__": 16 results = get_input("test.inp") 17 18 for k,v in results.items(): 19 print('-'*20) 20 print(k) 21 for i in v: 22 print(i)

投稿2018/02/09 02:03

mkgrei

総合スコア8560

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

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

tera_nsykuh

2018/02/09 02:08

ありがとうございます。 実現したい通りのコードです。
guest

0

解決後ではありますが、正規表現を使った方が綺麗に書ける気がしたので書いてみました。

my_file_load.py

python

1import re 2import pprint 3 4def file_load(file_name): 5 with open(file_name) as f: 6 doc = f.read() 7 8 content_dic = {} 9 10 elms = re.findall(r'[(\w+)]\n(.*?(?=[))',doc,flags=re.DOTALL) 11 12 for elm in elms: 13 content_dic[elm[0]] = elm[1].rstrip('\n') 14 15 return content_dic 16 17if __name__=='__main__': 18 dic = file_load('test.txt') 19 pprint.pprint(dic)

test.txt

plain

1[Title] 2test input 32018.02.07 4 5[Parameter] 6ndim=4 7ncal = 5 8 9[Node] 10test.nod 11 12[Element] 13test.ele 14 15 16[End]

実行結果

plain

1{'Element': 'test.ele', 2 'Node': 'test.nod', 3 'Parameter': 'ndim=4\nncal = 5', 4 'Title': 'test input\n2018.02.07'}

それとファイル名や関数名をinputにするのは、pythonには組み込み関数としてinputがあるので、避けた方がいいです。

投稿2018/02/09 02:24

編集2018/02/09 03:18
namnium1125

総合スコア2043

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

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

namnium1125

2018/02/09 02:25

かぶった。。(大分遅刻)
tera_nsykuh

2018/02/09 02:32

ありがとうございます。 関数名についてのコメントも勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問