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

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

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

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

Q&A

解決済

1回答

4472閲覧

python 複数のファイルから数値を読み取り、一つのファイルに書き出す

hirochika

総合スコア8

Python 3.x

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

0グッド

0クリップ

投稿2017/12/18 10:05

###前提・実現したいこと
環境
python 3.6
windows

一つのフォルダ中の複数のテキストファイルから数値を一つずつ読み取り,一つのファイルに書き出す

###該当のソースコード

import os import sys import re target_dir = sys.argv[1] if len(sys.argv) >= 2 else '.' for filename in os.listdir(target_dir): path_in = os.path.join(target_dir, filename) if not (os.path.isfile(path_in) and path_in.endswith('.txt')): continue bun = open("path_in", "r") line = bun.read() eigen = re.findall('[0-9]{1}.[0-9]{5}[E+]{2}[0-9]{2}' , line) fout = open("result.txt", "w") fout.writelines(min(eigen)) fout.close()

###試したこと
一つのファイルから数値を読み取るところまではできています
hoge1.txtからhoge9.txtまでこの作業を繰り返すことができませんでした
No such file or directory: 'path_in' と表示されます

また読み取った数値A(1)からA(9)を一つのテキストデータにまとめるところがなにもできていません

参考となるサイト等あれば教えていただきたいです
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示いただいたコードは最新のものですか?
だとすると、

python

1 bun = open("path_in", "r")

この行のopen関数の第一引数はダブルクオーテーションのくくりは不要です。このせいで変数path_inではなく、文字列"path_in"がファイル名とみなされ、ファイルのオープン処理が行われ、No such file or directory: 'path_in' となります。

また読み取った数値A(1)からA(9)を一つのテキストデータにまとめるところがなにもできていません

どのように出力したいかが不明なので、意図したものになるかはわかりませんが、複数ファイルのデータをまとめて出力するのであれば、適当なリストを作って、各結果を格納して、そのリストのデータを出力すればいいと思います。適当ですが、↓とか。
#実際には、findallで取得したデータをどう書き出すかで変わると思うので、適当に書こうしてください。

python

1import os 2import sys 3import re 4target_dir = sys.argv[1] if len(sys.argv) >= 2 else '.' 5 6data = [] # 結果保存用 7 8for filename in os.listdir(target_dir): 9 path_in = os.path.join(target_dir, filename) 10 if not (os.path.isfile(path_in) and path_in.endswith('.txt')): 11 continue 12 bun = open("path_in", "r") 13 line = bun.read() 14 data.append(re.findall('[0-9]{1}.[0-9]{5}[E+]{2}[0-9]{2}' , line)) # 格納 15 16# データ書き出し 17with open("result.txt", "w") as f: 18 for d in data: 19 f.writelines(d)

投稿2017/12/18 10:36

diningyo

総合スコア379

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

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

hirochika

2017/12/18 11:00

回答ありがとうございます 無事エラーなく走りました! また解説ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問