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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

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

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

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

Q&A

解決済

2回答

4422閲覧

Pythonでの複数列ファイル書き込みについて

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

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

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

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

0グッド

0クリップ

投稿2021/08/02 23:44

編集2021/08/03 02:43

前提・実現したいこと

テキストファイルからデータを読み込んで、ファイルを1つにしようとしています。
例えばtext1, text2と以下のようにあった場合、text3として各ファイルのデータを列として、書き出したいです。テキストデータの中身は各ファイルで同じ行数と同じタイミングでの空行、文字列型、各単語ごとに改行されています。

text1.txt

Apple Orange Peach Orange Apple Peach

text2.txt

Yes No Yes No No Yes

text3.txt

Apple Yes Orange No Peach Yes Orange No Apple No Peach Yes

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

引数を複数とれない関数なのですが、複数を今回のように書き込みたい場合、どうすればいいのでしょうか。

TextIOWrapper.write() takes exactly one argument

該当のソースコード

以下のコードで、ターミナル上はtext3.txtに書き出したい出力を確認できています。

Python

1def integrate_files(): 2 with open(‘text1.txt', 'r') as fruits_file: 3 fruits_lists = list(fruits_file) 4 5 with open(‘text2.txt', 'r') as exist_file: 6 exist_lists = list(exist_file) 7 8 with open(‘text3.txt', mode='w') as f: 9 10 for num in range(len(fruits_lists)): 11 fruits_list =fruits_lists[num].split() 12 exist_list = exist_lists[num].split() 13 for i in range(len(fruits_list)): 14 f.write(fruits_list[i], exist_list[i]) 15 print(fruits_list[i], exist_list[i]) 16         f.write(' ') 17         print(' ') 18

試したこと

以下のように変更して引数を1つにしてみたのですが、出力が変わってしまいました。

f.write(str(fruits_list[i] + ' ' + exist_list[i]))
#ターミナル ('Apple', 'Yes') ('Orange', 'No') # text3.txt Apple Yes, Orange No, ...

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

Mac OS
Python 3.9.1

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

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

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

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

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

guest

回答2

0

pythonでの回答ではないので無視してくださいです。

linuxなどの上での作業であれば、以下のコマンドでできます。

shell

1 paste -d ' ' text1.txt text2.txt > text3.txt

問題を解決するのが目的で、pythonでなくてもよいということであれば、こういうshellでのコマンド操作の方が手軽だったりします。

投稿2021/08/03 02:46

TakaiY

総合スコア13792

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

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

0

ベストアンサー

f.write(fruits_list[i] + ' ' + exist_list[i] + '\n')

とすれば、text3.txtは作成できます。(tags_listを正しく定義する必要はあります。)

ただし、もう少し簡単でわかりやすい書き方もありますので、改良した方が良いです。

追記 改良といっても手がかりがないと難しいでしょうから、サンプルを書いておきます。

  • 考え方

いろいろなことを同時にやると問題点が見えません。
読み込み、連結、書き出しを分けた方が間違いが少なくなります。

  • サンプル

以下の例の三つの関数、file2listとcombine_listsとlist2fileを実装すればわかりやすいコードになるでしょう。

読み込み

python

1>>> print(file2list.__doc__) 2ファイルを読み込んで、各行から改行を取り除いた文字列のリストを返す。 3>>> fruits = file2list('text1.txt') 4>>> print(fruits) 5['Apple', 'Orange', 'Peach', '', 'Orange', 'Apple', 'Peach'] 6>>> exists = file2list('text2.txt') 7>>> print(exists) 8['Yes', 'No', 'Yes', '', 'No', 'No', 'Yes']

連結

python

1>>> print(combine_lists.__doc__) 2文字列からなる同じ長さの二つのリストを受取り、それぞれのリストの文字列を空白でつないだ文字列のリストを返す。 3ただし、左の文字列が空文字列の場合は対応する出力中の文字列は空文字列とする。 4>>> outputs = combine_lists(fruits, exists) 5>>> print(outputs) 6['Apple Yes', 'Orange No', 'Peach Yes', '', 'Orange No', 'Apple No', 'Peach Yes']

書き出し

python

1>>> print(list2file.__doc__) 2リストに含まれる文字列を一行にひとつずつファイルを書き出す。 3>>> list2file(outputs, 'text3.txt') 459

投稿2021/08/03 00:16

編集2021/08/03 02:04
ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問