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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Q&A

解決済

1回答

4342閲覧

CSVファイルのデータの一部を抜き出してExcelファイルに出力する。

K.G

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

0グッド

1クリップ

投稿2020/04/29 10:53

前提・実現したいこと

業務効率化のためにpythonでエクセルを操作することを学んでいます。
CSVファイルで出力された測定データの値を抜き出して
1つのエクセルファイルに書き出したいです。
CSVファイルすべてに記載された値をエクセルにそのまま書き出すことだけはできたのですが
・範囲を指定して書き出すこと
・2列で記載されたデータを一列にしてエクセルファイルに書き出すこと
いろいろサイトを調べましたがこの2つが実現できませんでした。
ご回答のほど、よろしくお願い致します。

イメージ説明

該当のソースコード

#CSVファイルをそのままエクセルに書き出すコード

python

1import openpyxl 2import csv 3 4wb = openpyxl.Workbook() 5ws = wb.active 6ws.title = "new_data" 7 8with open("..\data\sound_data\data1.csv") as f: 9 r = csv.reader(f, delimiter=',') 10 for row in r: 11 ws.append(row) 12 13wb.save("..\data\sound_data\output_data.xlsx")

試したこと

データをリストに格納してみたりしましたが
上手くいきませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

csv パッケージでデータを読み込んで、縦に結合する処理はこんな感じとなります。
(1列目と2列目のデータを別のリストに格納し結合)
データの書き出しはセル指定で行っております。

Python

1import openpyxl 2import csv 3 4# データ読み込み部 5with open("..\data\sound_data\data1.csv", encoding='SHIFT-JIS') as f: 6 col1, col2 = [], [] 7 r = csv.reader(f, delimiter=',') 8 for row in r: 9 col1.append(row[0]) 10 col2.append(row[1]) 11 # 1列目と2列目のデータを結合 12 data = col1[1:] 13 data.extend(col2[1:]) 14 15# データ書き込み部 16wb = openpyxl.Workbook() 17ws = wb.active 18ws.title = "new_data" 19for i,d in enumerate(data, start=2): 20 # セルを指定してデータを書き出す(一応データを数値変換してます) 21 ws.cell(row=i, column=1, value=int(d)) 22wb.save("..\data\sound_data\output_data.xlsx")

ただ、この手の処理を行いたいのであれば、個人的にはpandasをお勧めしたいところです。
pandasならば、csvの読み込み、列同士の結合、excelへの書き出しが全てサポートされてますので
下記のように数行で書けます。

import pandas as pd df = pd.read_csv('..\data\sound_data\data1.csv', encoding='SHIFT-JIS') ser = pd.concat([df['値1'], df['値2']], ignore_index=True).rename('') ser.to_excel('..\data\sound_data\output_data.xlsx', index=None, sheet_name='new_data', encoding='SHIFT-JIS')

投稿2020/04/30 01:06

編集2020/04/30 01:08
magichan

総合スコア15898

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

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

退会済みユーザー

退会済みユーザー

2020/04/30 05:02

参考にさせていただきます。ありがとうございます。
K.G

2020/04/30 11:55

早速の回答ありがとうございました。上手くいきました。詳細はググればなんとか理解できそうです。 pandas の方は確かにコードが短くなり良いですね。これも調べてみます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問