2017-07-20 8 views
0

私はCSVファイルの束を1つのCSVファイル 'Combined'に結合します。各CSVファイルについて、データが 'Combined'ファイルに追加されると、 'Combined'の列1の前に新しい列を挿入し、その反復でデータがコピーされたCSVファイルの名前を挿入します。 Pythonでこれを行う方法はありますか?CSVファイルに列を追加し、その列にファイル名を挿入してください。

+0

追加するcsvファイルの形式は何ですか?列を追加していますか?または既存の列に追加されたばかりの新しいデータ? – userXktape

+0

は、他と同じcsvファイルの形式ですか? – MattR

+0

@userXktape:CSVファイルの形式は.LOGです。私は列を追加していません。私はちょうど最初の列にファイル名を挿入し、既存のデータのすぐ下のファイルにあるものを追加したいと思います。 –

答えて

0

これは次のように行うことができます。まず出力用のCSVファイルを開きます。今度は、Pythonのglobライブラリを使用して、フォルダ内のすべてのCSVファイルを一覧表示します。 CSVファイルの行ごとに、最初の列のエントリとして、ファイル名の前に付け、その後output.csvに書き込み:

import glob 
import csv 

with open('output.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output) 

    for filename in glob.glob('*.csv'): 
     with open(filename, newline='') as f_input: 
      csv_input = csv.reader(f_input) 

      for row in csv_input: 
       row.insert(0, filename) 
       csv_output.writerow(row) 

ですから、例えば、あなたがこれらの二つのCSVファイルを持っていた場合:

num.csvを

1,2,3,4,5 
1,2,3,4,5 
1,2,3,4,5 

それは次を作成します

a,b,c,d,e,f 
a,b,c,d,e,f 
a,b,c,d,e,f 
a,b,c,d,e,f 

letter.csvファイル:

letter.csv,a,b,c,d,e,f 
letter.csv,a,b,c,d,e,f 
letter.csv,a,b,c,d,e,f 
letter.csv,a,b,c,d,e,f 
num.csv,1,2,3,4,5 
num.csv,1,2,3,4,5 
num.csv,1,2,3,4,5 

これは、Python 3.xを使用していることを前提としています。

+0

素晴らしいマウンテンエヴァンス。ありがとう、トン。 Pythonには初めてのもので、これを理解するのに本当の問題がありました。私の質問への小さな変更:これらの「CSVファイル」は結合されなければならず、実際にはZIP形式のフォルダ内の.LOGファイルです。 イテレータはバイトではなく文字列を返す必要があります(テキストモードでファイルを開いたのですか?) PS:私はPython 3.xを使用していますが、私はそれを解凍する方法を知っています。 。 –

+0

Python 3.xでは、ファイルを少し違って開く必要があります。私はそれに応じてスクリプトを更新しました。あなたのログファイルが同じフォーマットであると仮定すると、 '* .log'を使って以下のように変更してください。 –

+0

コードはこのエラーを投げました:引数 'newline'はバイナリモードではサポートされていません。これは、 'r'が 'rb'にデフォルト設定されていることが原因であると考えられます。だから、私は 'r'を 'rt'に変更しただけで完全に動作します。ありがとう、トン! –

関連する問題