

以下のような中身の異なる二つのtxtファイルがあります。この二つのデータから、文字列(aaa00など)が一致しているデータだけを抽出し、二つのデータを結合した出力が欲しいです。

このようなコードを教えて頂けたら嬉しいです。よろしくお願いします。

**対象の txt ファイル:**

test1.txt

[code]

    aaa00,123.22,42.11
    aba00,163.22,73.11
    acc01,298.11,63.28
    ...
    
[/code]

test2.txt

[code]

    bbb00,1872
    aaa00,2001
    aba00,789
    caa01,983
    ...
    
[/code]

**期待する出力結果:**

[code]

    aaa00,123.22,42.11,2001
    aba00,163.22,73.11,789
    
[/code]


CC BY-SA 4.0
2022-10-23T15:52:31.100
91772
2022-10-25T21:31:19.513
2022-10-25T16:33:29.273
3060
54990
question
python
２つのtxtファイルに保存されているデータから列が一致するデータを結合して出力したい


ふたつのデータを inner join すれば良いです。以下は Pandas の
[`pandas.merge`](https://pandas.pydata.org/docs/reference/api/pandas.merge.html)
を使った例です。

[code]

    >>> import pandas as pd
    >>> df1 = pd.DataFrame([
    ...   ["aaa00", 123.22, 42.11],
    ...   ["aba00", 163.22, 73.11],
    ...   ["acc01", 298.11, 63.28]
    ... ])
    >>> df2 = pd.DataFrame([
    ...   ["bbb00", 1872],
    ...   ["aaa00", 2001],
    ...   ["aba00", 789],
    ...   ["caa01", 983]
    ... ])
    >>> df1.merge(df2, how="inner", on=0)
           0     1_x      2   1_y
    0  aaa00  123.22  42.11  2001
    1  aba00  163.22  73.11   789
    
[/code]

DataFrame を得るために CSV
ファイルから読み込むには、[`pandas.read_csv`](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html)
を使うと良いです。


CC BY-SA 4.0
2022-10-23T22:49:22.423
91775
2022-10-24T06:00:31.133
2022-10-24T06:00:31.133
19110
19110
91772
answer


素の Pythonで。  
CSVと思しき形式が簡易ならこんなふうにも可能  
(一般的な CSVなら, CSVモジュール使うほうがよいです)  
また colabで確認したため, 記述が現在一般的な Pythonより少し古めにしてます

[code]

    import io
    
    f01 = '''
    aaa00,123.22,42.11
    aba00,163.22,73.11
    acc01,298.11,63.28
    '''
    f02 = '''
    bbb00,1872
    aaa00,2001
    aba00,789
    caa01,983
    '''
    
    with io.StringIO(f01.strip()) as fp1:   # with open(fname1) as fp1:
        dct = {ln.split(',')[0]: ln.strip() for ln in fp1}
    with io.StringIO(f02.strip()) as fp2:   # with open(fname2) as fp2:
        lst= [','.join([dct[k]]+ v) for ln in fp2
                            for k,*v in (ln.strip().split(','),)if k in dct]
    
    lst
    # ['aaa00,123.22,42.11,2001', 'aba00,163.22,73.11,789']
    
    
[/code]


CC BY-SA 4.0
2022-10-24T04:20:23.470
91783
2022-10-24T04:20:23.470
43025
91772
answer


あまり明確ではなくてすみません。考えた手順だけ一応書いておきます。  
参考にならないかもしれませんのであまり気にしないでください。  
1,テキストデータを読み込むor手書きで変数に格納する  
2,一列ごとにfor文でリストに格納する(テキスト1はリストa、テキスト2はリストbに格納)  
3,aとbから数字だけ別の変数に格納し削除する(数字の入っている変数をaの数字はc、bの数字はdと呼ぶ)  
4,aの一つ目の要素=bのn番目の要素のfor文でnをbのリストの要素回bのリストの要素回1加算する。(つまり、aの1行目をbのすべての行と比較する)  
5,3をaの要素回繰り返す  
これで少し重いですがaのすべての行を1行ずつbのすべての行と比較することができるはずです。  
少しでも参考になれば幸いです。


CC BY-SA 4.0
2022-10-25T06:26:12.920
91805
2022-10-25T21:31:19.513
2022-10-25T21:31:19.513
55019
55019
91772
answer