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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

1314閲覧

AutomaterでPythonを利用し複数のCSVを結合する際に、2つ目のファイルからヘッダーを除いて結合したい

NN77

総合スコア60

Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2022/03/27 22:58

編集2022/03/27 23:52

MacのAutomaterを利用し、シェルスクリプトでPythonを使うことで複数のCSVファイルを結合しようとしています。その際、ヘッダーが全て共通のため、ヘッダーは1つ目のファイルでのみ取得し、2つ目のファイル以降は除外して結合したいのですが、以下のコードにどのように追記すれば良いかがわかりません。。アドバイス頂けますと幸いです。

記載しているPythonのコードは以下(インポートのエラー解消と、ファイル名の追記の対応をしています)

# coding=utf-8 import os import sys merged_text = "" for file in sys.argv[1:]: with open(file) as f: basename = os.path.basename(file).decode('utf-8') text1 = f.read().decode('cp932') array1 = [basename + ',' + x for x in text1.splitlines()] text2 = '\n'.join(array1) + '\n' merged_text += text2 merged_filename = "結合テキスト.txt" dirname = os.path.dirname(sys.argv[1]) with open(os.path.join(dirname, merged_filename), "w") as f: f.write(merged_text.encode('cp932'))

利用している実装方法は以下
https://teratail.com/questions/354025?fbclid=IwAR0amXFr26np97agaItD6-F8cBXsbe1lTY9A-GNRonbykDHDkys0SnAxg6w

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

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

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

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

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

guest

回答1

0

ベストアンサー

次のような感じではどうでしょうか。

ごめんなさい、コードに誤りがありました・・
(1列目のファイル名をつける部分をスルーしてしまいました)

text2 = '\n'.join(array2) + '\n'
text2 = '\n'.join(array3) + '\n'に修正しました。

py

1# coding=utf-8 2import os 3import sys 4 5header_length = 1 6merged_text = "" 7files = sys.argv[1:] 8for file in files: 9 with open(file) as f: 10 basename = os.path.basename(file).decode('utf-8') 11 text1 = f.read().decode('cp932') 12 array1 = text1.splitlines() 13 array2 = array1 if files.index(file) == 0 else array1[header_length:] 14 array3 = [basename + ',' + x for x in array2] 15 text2 = '\n'.join(array3) + '\n' 16 merged_text += text2 17 18merged_filename = "結合テキスト.txt" 19dirname = os.path.dirname(sys.argv[1]) 20with open(os.path.join(dirname, merged_filename), "w") as f: 21 f.write(merged_text.encode('cp932'))

投稿2022/03/28 01:24

編集2022/03/28 06:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

NN77

2022/03/28 06:21

xg63ex2b様 度々ありがとうございます。本当に助かります。こちらで2ファイル目のヘッダー削除は実現できたのですが、以下の事象が発生してしまいました。もし対応方法が見当がつけばコメントいただけますと幸いです。 ・1列目のファイル名がなくなってしまった。 ・ところどころ空白行ができたり、カラムずれが起こってしまった。 普段このような作業をすることがなく、何から何までのご質問となり誠に恐縮です。。
退会済みユーザー

退会済みユーザー

2022/03/28 06:31

コメントありがとうございます。 > ・1列目のファイル名がなくなってしまった。 ごめんなさい、コードに誤りがありましたので、回答のコードを修正しました。 > ・ところどころ空白行ができたり、カラムずれが起こってしまった。 こちらは以前のコードだと大丈夫で、今回のコードで問題になってしまったでしょうか? 元のCSVファイルにそういったデータが含まれていたりするでしょうか?
NN77

2022/03/28 07:15

ありがとうございます! > ・1列目のファイル名がなくなってしまった。 ごめんなさい、コードに誤りがありましたので、回答のコードを修正しました。 これで治りました!2点目も上の対応で解消されております。誠にありがとうございました...!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問