2017-08-01 8 views
0

私は20のtxtファイルを持っています。 10はテキストファイルを水平にマージする

A_1,A_2......A_10 

であり、他の10は

ので
B_1,B_2.....B_3......B_10 

は、基本的に、私は水平A_1B_1A_2B_2 ........、A_10B_10をマージしようとしています(つまり、各列がABの場合は、出力を8にします)。私はまた、これらの10のマージされたファイルを保存したい。私はPythonでは本当に新しいので、どうやって行くのかは分かりません。

import numpy as np 
filelist=[] 
filelist1=[] 
for i in range(1,11): 
    filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i) 
for j in range(1,11): 
    filelist1.append("/Users/Hrihaan/Desktop/B_%s.txt" %j) 
+0

appendが最後に追加されます。 a_1とb_1から1行目を読みたいとします。これらの行を結合し、 'newline = aLine + bLine'して、新しい行に新しいファイルを書き出します。次に、行を読み、結合して、新しいファイルに書き込むだけです。少なくとも、ファイルを読み込んで新しいファイルに書き込むようにしてください。あなたが投稿したコードは、ほとんど試みとしてカウントされません。 – Jacobr365

+0

別の方法:あなたはそれらをpandasでデータフレームに読み込み、df concatを使うことができます:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html –

+0

ファイルの? numpyを使いたい場合は、配列に読み込む必要があり、フォーマットが重要です。 –

答えて

1

を同じことを行います。次のコードは、ファイルA_1〜A_10とB_1〜B_10を読み込み、それぞれのファイルを水平方向に追加して、最後に10個のデータフレームを作成します。

import pandas 

dataFrames_A = [] 
dataFrames_B = [] 

# file count of each type A or B 
fileCount = 10 

for i in range(1,fileCount+1): 
    fileName_A = 'C:/Users/Hrihaan/Desktop/A_' + str(i) + '.txt' 
    fileName_B = 'C:/Users/Hrihaan/Desktop/B_' + str(i) + '.txt' 

    dataFrames_A.append(pandas.read_csv(fileName_A, sep='\t', encoding='utf-8')) 
    dataFrames_B.append(pandas.read_csv(fileName_B, sep='\t', encoding='utf-8')) 

mergedDataFrames = [] 
for i in range(0,fileCount): 
    mergedDataFrames.append(pandas.concat([dataFrames_A[i], dataFrames_B[i]], axis=1)) 

for i, dataFrame in enumerate(mergedDataFrames): 
    fileName = 'C:/Users/Hrihaan/Desktop/A_B_' + str(i+1) + '.txt' 
    dataFrame.to_csv(fileName, sep='\t', encoding='utf-8') 
+0

こんにちはAnoop、あなたの提案のおかげで、私はファイルのパスを指定する必要はありませんか?そして、マージされた10のファイルはどこに保存されますか?私はtxt形式でも出力をしようとしています。 – Hrihaan

+0

これは、スクリプトと入力txtファイルが同じディレクトリにあると仮定しています。また、出力ファイルも同じディレクトリに保存されます。必要と感じる場所であればいつでもパス情報を提供できます。最後に、出力ファイルは最後のforループの変数fileNameに表示されるように.txtとして保存され、区切り文字も '\ t' –

+0

あなたの指示に従ってみましたが、この2つのエラーがあります。 (1、fileCount + 1)エラー:(ファイルb'A_1.txt 'は存在しません)、2:mergedDataFrames = []エラー後:(リストインデックスが範囲外です)。私のファイルのパスはC:\ Users \ Hrihaan \ Desktopです。あなたの助けは本当に感謝しています。 – Hrihaan

1

あなただけに関係なく、コンテンツの行を結合する場合は、を必要としない:

import os 

def path(dirname, letter, index): # build the absolute path of a single file 
    return os.path.join(dirname, '{}_{}.txt'.format(letter, index)) 

d = 'C:/Users/Hrihaan/Desktop' 
for i in range(1, 11): 
    with open(path(d, 'C', i), 'w') as fout, open(
      path(d, 'A', i)) as fa, open(path(d, 'B', i)) as fb: 
     for line_a, line_b in zip(fa, fb): 
      fout.write(line_a.rstrip('\n') + line_b) 

これは、これらの場合は必要になります2、の間の任意の区切り文字を挿入しません。タブまたはコンマで区切られたファイルです。あなたは、たとえば、コードの最後の行に適切な区切り文字を追加することができます。

fout.write(line_a.rstrip('\n') + ' ' + line_b) 

また、あなたはファイルの実際の解析を含む別の方法を使用することができます。 (改行'\n'文字で分割)行のアレイにファイルの一組は、まず、分割ファイルAのコンテンツの

+0

お返事ありがとうございます。推測、エラー:(FileNotFoundError:[Errno 2]そのようなファイルまたはディレクトリ: 'A_1')。 – Hrihaan

+0

@Hrihaan私は '.txt'を忘れました(あなたのコードではなくあなたの質問を見ていました)。今すぐ修正しました。 –

+0

@Hrihaanはフルパスを使いやすく編集しました。 –

1

、およびファイルBの線のそれぞれについて、ファイルBと

を同じことを行いますその行をAの対応する行に追加します。ファイルAの行数がファイルBの行数と異なる場合は、行数が同じになるまで、短い配列の残りの部分を空の文字列で埋めてください(何かと対応する行を連結してください) 。

最後に、あなたの問題は簡単にパンダを使用して解決することができる'\n'文字で(今両方のファイル行の連結である)、ファイルAの行を連結し、ファイルBで

関連する問題