🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

849閲覧

pythonでcsvに書き込む

daisanrock

総合スコア8

CSV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/09/15 08:21

編集2019/09/15 11:35

csvから読み込んだ内容を別ファイル名のcsvへ書き込みたいです。
pythonのプログラミングを勉強し始めの初心者です。
現在csvの内容を読み込み、その読み込んだ内容を別ファイル名のxlsx/csv/xlsmのどれかに書き込むというプログラムを作りたいと思っております。

下記の通り、読み込むまでは出来たのですが、その後の別ファイルへの書き込みができません。
別ファイル名は【test.xlsx or csv or xlsm】として、書き込み開始セルを【A6】としたいです。
ご教示願います。

書いたプログラムは以下の通りです。

import csv with open('test.csv', 'r') as f: reader=csv.reader(f) header=next(reader) #ヘッダー削除 for row in reader: if 'リンゴ' not in row[3]: #3列目にリンゴの文字列があれば行削除 print(row) with open('test1.csv','w') as f: writer=csv.writer(f) writer.writerows(row)

結果は読み込んだ最終行の文字列がセルごとにバラバラに記述されるファイルが出来ました。
読み込みはこちらが意図した動きをしているのですが、書き込みがだめです。

どなたかご教示いただければ幸いです。
宜しくお願いいたします。

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

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

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

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

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

nomuken

2019/09/15 09:07

ソースを``` ~ ```で囲んで記述し、インデントがわかるようにしてください。
daisanrock

2019/09/15 11:41

すいません。使い方がまだ良く分からなくて…。 インデント分かるようにしました。
guest

回答1

0

ベストアンサー

まずは読込データ行を蓄積し、出力時には最初に空行を出してやれば意図したファイルができあがるかと思います。

Python

1import csv 2from io import StringIO 3 4# テストデータ読込 5s = """c1,c2,c3 6あいう,abc,123 7かきく,def,456""" 8data_rows = [] 9reader = csv.reader(StringIO(s)) 10header = next(reader) 11for row in reader: 12 data_rows.append(row) 13 14# A6まで空行を出力するため 15blank_rows = [['' for _ in range(len(header))] for _ in range(5)] 16 17with open('test1.csv','w', newline='', encoding='utf-8') as f: 18 writer = csv.writer(f) 19 writer.writerows(blank_rows) 20 writer.writerows(data_rows)

投稿2019/09/15 09:13

can110

総合スコア38341

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

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

daisanrock

2019/09/16 08:36

ご返答ありがとうございます。 すいません、知識が乏しいので分からないのですが、私の書いた「読み込み」までのプログラミングは使えないのでしょうか? なぜ「s=“””〜」が書かれてるのか理解が出来ません。 ご教示お願いいたします。
can110

2019/09/16 09:04

文字列データをファイルとして扱うためのテクニックです。 回答コードをどのような環境でも実行できるようにあえて書いたものなので ファイルから読み込むようにコードを変えてもらってかまいません。
daisanrock

2019/09/16 09:26

ありがとうございます。 ファイルから読み込むコードを教えていただけませんか? それか、私が書いた読み込みコードのあとの別ファイルに書き込むコードをご教示願います。 申し訳ありません。
can110

2019/09/16 10:16

読み込む処理は質問コードでできていると思われますし、書き込むコードは回答にあるかと思うのですが、いかがでしょうか?
daisanrock

2019/09/16 11:30

以下コードで実行しましたが、読み込んだものをtest1.csvへ吐き出すことが出来ていません。 can110さんの助言により自己解決したいのですが、自分のレベルが低くご迷惑おかけします。 ''' import csv with open('test.csv', 'r') as f: reader=csv.reader(f) header=next(reader) #ヘッダー削除 for row in reader: if 'aaa' not in row[3]: #3列目にaaaの文字列があれば行削 blank_rows=[['' for _ in range(len(header))] for _ in range(5)] with open('test1.csv','w',newline='',encoding='utf-8') as f: writer=csv.writer(f) writer.writerows(blank_rows) writer.writerows(row) '''
can110

2019/09/17 09:27

コメント欄だとインデントがなくなってしまうためコード検証できませんが、「if ’aaa’」以降がおかしいような気がします。 まずは単純に入力ファイルをそのまま読み込んで別ファイルにそのまま出力するようなコードを書いてみるとよいかと思います。
daisanrock

2019/09/17 13:36

can110さん、出来ました! 助言いただきまして、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問