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

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

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

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

Q&A

解決済

3回答

4516閲覧

Python3 改行しながらテキストファイルへデータを書き込む

yakkon

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2019/06/28 01:07

Pyhon3を学習し始めたものです。
テキストファイルを呼び出しそのデータを使って計算をして、さらに計算値を別のテキストファイル書き込む...というプログラムを作ろうとしております。
そこで、テキストファイルを呼び出してそのデータを使うことは問題ないのですが、計算値のデータ(イテラブルなものと言えば良いのでしょうか)を1つのデータが1行ずつテキストファイルへ書き込まれるようにすることがどうしても出来ずにいました。

以下にいくつか試した中で2つ示しますが、テキストファイルへ書き込まれたデータはどうしても各々のデータが一行にまとまってしまいます。

読み込んでるテキストファイルの内容
10
20
30
40
50
60
70
80
90
100

プログラムファイルの内容 1つ目

Python3

1dataset = open('textfiles/190628data.txt', 'r') 2datalist = dataset.read().split() 3value_f = open('textfiles/190628value.txt', 'w') 4 5 6for data in datalist: 7 a = float(data) / 1000 8 a_list = str(a).split() 9 c = '\n'.join(a_list) 10 value_f.write(c) 11 12dataset.close() 13value_f.close() 14

書き込んだテキストファイルの内容 1つ目
0.010.020.030.040.050.060.070.080.090.1

プログラムファイルの内容 2つ目

Python3

1dataset = open('textfiles/190628data.txt', 'r') 2datalist = dataset.read().split() 3value_f = open('textfiles/190628value_2.txt', 'w') 4 5 6for data in datalist: 7 a = float(data) / 1000 8 a_list = str(a).split() 9 value_f.writelines(a_list) 10 11dataset.close() 12value_f.close() 13

書き込んだテキストファイルの内容 2つ目
0.010.020.030.040.050.060.070.080.090.1

以上が作ったプログラムとデータを書き込んだテキストファイルの内容となります。

環境は、AnacondaとエディタはAtomで行っています。
問題解決のために、どんなアプローチで切り込めば良いのか解らず立ち止まっていました。
とても初歩的なことかも知れませんが、ご助言頂きたいです。宜しくお願いいたします。

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

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

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

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

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

guest

回答3

0

一行読みとって、一行出力する処理を素直に書いてやれば良いです。

Python

1with open('textfiles/190628data.txt') as fin, \ 2 open('textfiles/190628value_2.txt', mode='w') as fout: 3 4 for line in fin: 5 line = int(line) # for line in map(int, fin): でループしても良い 6 print(line/1000, file=fout)
  • with文を使うとリソースのクローズを確実に行えます。
  • print(e, file=f) は f.write(str(e)+'\n') と同じように動作します。

投稿2019/06/28 03:08

LouiS0616

総合スコア35660

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

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

yakkon

2019/07/02 07:57

返信が遅くなり申し訳ありません。 ご回答ありがとうございます。試してみて、原因はわからないのですが上手くできませんでした...。 ありがとうございます。
LouiS0616

2019/07/02 08:00

何かエラーを吐いたんでしょうか?
guest

0

ベストアンサー

1つ目のコードの以下の部分ですが、これは意味をなしていません。

py

1 a = float(data) / 1000 2 a_list = str(a).split() 3 c = '\n'.join(a_list)

各行でデータの状態を表すと以下のようになります。

py

1 # data は '10' とする 2 a = float(data) / 1000 3 # a は 0.01 4 a_list = str(a).split() 5 # str(a) は '0.01'。 split() は文字列内の空白で分割するため、 a_list は ['0.01'] 6 c = '\n'.join(a_list) 7 # c は '0.01'

c = '\n'.join(a_list) の後で改行がなくなっているのが分かると思います。これを write しても改行は書き込まれません。 join と split を消し c = str(a) + '\n' とするのがよいでしょう。

投稿2019/06/28 01:21

編集2019/06/28 01:26
uasi

総合スコア93

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

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

yakkon

2019/06/28 01:45

さっそくご回答をありがとうございます。ご助言頂いた通りプログラムを書き直してみたら、ちゃんとデータが一行ずつテキストファイルに書き込まれ、解決できました。助かりました、ありがとうございます。
guest

0

改行したいなら、テキストの末尾に改行コード '\r\n' を付けるといいです

投稿2019/06/28 01:15

y_waiwai

総合スコア87774

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

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

uasi

2019/06/28 01:22

この質問は改行コードの違いが問題にはなっていません ????‍♂️
yakkon

2019/06/28 01:42

さっそくご回答ありがとうございます。試してみましたが...私の理解不足だと思いますが、目的であったテキストファイルにデータを改行しながら(1行ずつ)書き込むことが叶いませんでした。 すぐに反応頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問