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

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

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

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

Q&A

3回答

575閲覧

2つのファイルの内容を1つのリストにする

gamdam

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2022/10/17 11:24

編集2022/10/18 02:31

前提

2つの別々のファイルの要素を一つのリストにするための方法を教えていただきたいです。
例としましては、
一つ目のファイルの内容が
[“人”,”子供”,”青”]
[“うさぎ”,”さる”,”ねずみ”]

二つ目のファイルの内容が
[“イタリア”,”フランス”,”スペイン”]
[“目”,”腹”,”頭”]

とした時、
[“イタリア”,”フランス”,”スペイン”, “うさぎ”,”さる”,”ねずみ”]

[“目”,”腹”,”頭”,“人”,”子供”,”青”]
となるように出力したいです

一つ目のファイルの1行目と二つ目のファイルの2行目といった形にリストにしたいです。

よければ教えていただきたいです。

コード
自分が今作成しているコードを載せます```python

port gzip import shutil import sqlite3 import pandas as pd import sqlite3 import collections import MeCab import csv import pprint import sqlite3 import re import time import NLP_def import itertools import numpy as np """""# 日本語wordnetをDLして解凍 with gzip.open('wnjpn.db.gz', 'rb') as f_in: with open('wnjpn.db', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)""" # synset(概念ID)とlemma(単語)の組み合わせDataFrameの作成 conn = sqlite3.connect("wnjpn.db") q = 'SELECT synset,lemma FROM sense,word USING (wordid) WHERE sense.lang="jpn"' sense_word = pd.read_sql(q, conn) # 類義語をリストにして返す関数を定義 def get_synonyms(word): """inputしたwordの類義語をリストにして返す。 Args: word(str): 類義語を検索する単語   Returns: list[str]: 類義語リスト """ # 類義語を検索する単語のsynsetを検索する synsets = sense_word.loc[sense_word.lemma == word, "synset"] # そのsynsetに紐づく全ての単語を取得(重複する可能性があるのでsetにする) synset_words = set(sense_word.loc[sense_word.synset.isin(synsets), "lemma"]) # 元の単語が入ってしまうので削除 if word in synset_words: synset_words.remove(word) return list(synset_words) ##print(get_synonyms("靴")) #textファイルの読み込み #****には保存したtxtファイルのパス名を入れてください f= open('hyouki.txt', 'r', encoding='UTF-8') text=f.read() print(text) f.close() txt_list = text.split() with open('file.txt', 'w', encoding='UTF-8') as f1, open('ruigigo.txt', 'w', encoding='UTF-8') as f2: for n in range(len(txt_list)): # 読み込んだtextファイルで形態素解析を行う tagger = MeCab.Tagger() tagger.parse('') node = tagger.parseToNode(txt_list[n]) # 取り出す品詞を決めている.今回は名詞 word_list = [] while node: word_type = node.feature.split(',')[0] # 名詞の他にも動詞や形容詞なども追加できる if word_type in ["名詞"]: word_list.append(node.surface) node = node.next word_chain = ' '.join(word_list) ##print(word_chain,file=f) ##print(word_list) print(word_list,file=f1) ruigigo2_list = [] ruigigo3_list = [] for m in range(len(word_list)): get_synonyms(word_list[m]) ruigigo2_list.append(get_synonyms(word_list[m])) ##print(ruigigo2_list) for e in ruigigo2_list : if isinstance(e, list): ruigigo3_list += e else: ruigigo3_list.append(e) print(ruigigo3_list,file=f2) print("\n") f1.close() f2.close() """ruigigo4_list = [] with open('file.txt', 'r', encoding='UTF-8') as f1, open('ruigigo.txt', 'r', encoding='UTF-8') as f2: file_data = f2.readlines() word_date = f1.readlines() for line in file_data: ##for line2 in word_date: ##if line < line2:"""

##実際にしたいこと
コードにあるファイルを説明します
例ですが、
hyouki.txt
"猫
カエル
パンダとキリン"

file.txt
"['猫']
['カエル']
['パンダ', 'キリン']"

ruigigo.txt
"['ねんねこ', 'キャット', 'にゃんにゃん', 'ネコ']
['蛙', '蝦']
['ジャイアントパンダ', '麒麟', 'ジラフ']"

となります。

この後、ruigigo.txtのi行目とfile.txtのi+1行目を結合したリストを作成したと考えています。
for文を用いようと考えたのですが、行数をどのように変数にするべきかわかりませんでした。
ファイルの中身はいつも3行ということではなく、それより多いこともあります。ただファイル内の行数はそれぞれ同じになります。

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

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

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

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

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

melian

2022/10/17 11:43

例えば、 from pprint import pprint lst1 = [["人", "子供", "青"], ["うさぎ", "さる", "ねずみ"]] lst2 = [["イタリア", "フランス", "スペイン"], ["目", "腹", "頭"]] cross = [a + b for a, b in zip(lst2, lst1[::-1])] with open('cross_list.txt', 'w', encoding='utf-8') as f: pprint(cross, width=50, stream=f) とすると cross_list.txt というファイルが作成されることになりますが、想定通りの内容になっていますか?
gamdam

2022/10/17 12:00

ありがとうございます 例では2行しかないのですが、3.4行と増えて行った時でもできるようにfor文で使えたりしますか?
meg_

2022/10/17 12:04

> 2つの別々のファイルの要素 ファイルはCSVファイルでしょうか?他の形式でしょうか? > 一つ目のファイルの1行目と二つ目のファイルの2行目といった形 「一つ目のファイルの1行目と二つ目のファイルの2行目」以外の組み合わせはどうなりますか?
melian

2022/10/17 12:15

> 例では2行しかないのですが、3.4行と増えて行った時でもできるようにfor文で使えたりしますか? 基本的に一つ目のファイルの行を逆順にして二つ目のファイルと結合しています。それでよければ使えます。
gamdam

2022/10/17 12:24

ファイルはCSVファイルでしょうか?他の形式でしょうか? テキストファイルです! 「一つ目のファイルの1行目と二つ目のファイルの2行目」以外の組み合わせはどうなりますか? 一つ目のファイルの1行目ともう一つのファイルの2行目、3行目、4行目といった形で、一つ目のファイルの行ともう一つのファイルのその行以外といった形です!
meg_

2022/10/17 12:36

補足説明は質問に追記されると回答がつきやすくなるかと思います。 > 一つ目のファイルの1行目ともう一つのファイルの2行目、3行目、4行目といった形で、一つ目のファイルの行ともう一つのファイルのその行以外といった形です! 一つ目のファイルには1行のデータしかないという前提ですか? > テキストファイルです! ファイル形式がよく分からないので、ファイルを読み込んでリストにするところまでのコードを載せてもらえませんか?
gamdam

2022/10/17 12:47

不慣れで申し訳ないです。 一つ目のファイルにも複数行あります! コード明日載せたいと思います! 申し訳ありません。
meg_

2022/10/17 14:29

一つ目のファイルのi行目ともう一つのファイルのi行名以外との組み合わせ、ということでしょうか。一つ目のファイルももう一つのファイルもデータは1行以上必ず存在するという前提で良いですか?
gamdam

2022/10/18 02:15

>>一つ目のファイルのi行目ともう一つのファイルのi行名以外との組み合わせ、ということでしょうか。一つ目のファイルももう一つのファイルもデータは1行以上必ず存在するという前提で良いですか? その通りです!
guest

回答3

0

一応問題文の通りにテキストファイルがあるとしてプログラムを考えてみました。
一度にファイルを読み込んでおいて,次の手順で一気にリストにしてしまいます。

  1. 最初にファイル先頭・末尾の"を消す
  2. 末尾の改行を消す
  3. 改行で文字列を分割したリストにする
  4. evalでその文字列を実行したpythonオブジェクトに変換

という流れです。

最後に二つのリストの中身のリストどうし足し合わせると勝手に結合するという流れです。

python

1def my_read_list(filename: str): 2 """ 3 ファイル名からリストを読み込む 4 """ 5 f = open(filename, 'r') 6 txts = f.read() 7 my_list = [eval(txt) for txt in txts.replace('"', '').strip().split('\n')] 8 return my_list 9 10 11list_file = my_read_list('file.txt') 12list_ruigigo = my_read_list('ruigigo.txt') 13 14list_bind = [f + r for f, r in zip(list_file, list_ruigigo)]

投稿2023/01/28 13:35

ujimushi_sradjp

総合スコア2091

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

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

0

ファイルが2つ  どちらのファイルも2行だけ  なのでしょうか?
であれば、
1.それぞれを読み込んで変数に格納して、
2.結合したい変数を結合して
3.printもしくはwriteする
でできると思います   
質問者さんは初心者マークをつけていらっしゃるので、コメントを気になさらず、
まずはコードを書いてみるといいと思いました
こうやってみtけれど、望む結果にならなかった、とコードを書くと回答が得られやすいと思います

投稿2022/10/18 01:39

taro373

総合スコア189

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

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

gamdam

2022/10/18 03:47

ありがとうございます 質問内容にコードも追加しました! また、ファイルの中身は2行と言うわけではなく、何行かあると思って欲しいです!
guest

0

Pythonでプログラム書かずにシェルコマンドでやっつけちゃうのはだめですか?
イメージ説明

shell

1su507$ cat file1.txt 2["人","子供","青"] 3["うさぎ","さる","ねずみ"] 4su507$ cat file2.txt 5["イタリア","フランス","スペイン"] 6["目","腹","頭"] 7su507$ TEMP=$(mktemp); tail -r file1.txt > $TEMP; paste -d ',' file2.txt $TEMP | sed -e "s/\],\[/,/"; rm -f $TEMP 8["イタリア","フランス","スペイン","うさぎ","さる","ねずみ"] 9["目","腹","頭","人","子供","青"] 10su507$

投稿2022/10/17 12:29

編集2022/10/17 12:32
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gamdam

2022/10/17 12:47

ありがとうございます! ただ、Pythonでおこないたいと思っています。申し訳ありません。
退会済みユーザー

退会済みユーザー

2022/10/17 15:21

いえ全く問題ございませんよ。「質問へのコメント」欄を拝読すると、質問に追記される予定のようですのでそちらを拝見してから回答できそうであれば、回答に追記します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問