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

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

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

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

Python

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

Q&A

解決済

2回答

1581閲覧

CSV内の日時フィールドをPythonで特定の形式に変換したい

fukazume

総合スコア78

CSV

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

Python

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

0グッド

0クリップ

投稿2020/08/27 01:28

編集2020/08/27 05:49

##質問
Pythonで以下のように日時フィールドを編集したいですが、変換するための条件(正規表現など?)や手法を自力で考えている時点で詰まっています。レコード行数は500行くらいです。ヒントなどお教えいただけますでしょうか。

処理前: "Tue, 07 Apr 2020 23:00:00 +0900" ↓ 処理後: "2020-04-07T23:00:00.000+09:00"

##経緯
CSVのデータ整理、標準化、クレンジングを目的として、とあるCSVレコードセットの日時形式変換を試みています。

##環境
Python 3.8.3
OS: Windows 10

どうぞよろしくお願い申し上げます。

###追記1(途中経過報告)
皆様ご回答いただき誠にありがとうございます!現状、以下コードのように0CSVから読み込んだ特定カラムのフィールドの文字列をjeanbiegoさんから教えていただいた方法で別の日時形式に変換するところまではできました。まだできてない処理は、この変換した日時形式の文字列で同フィールドを上書きする操作です。おそらくcsv.writerあたりを使用するのだろうと思いますが実装できないでいます。

また、全体のワークフローとして500レコードくらいのCSVを入手したところからCSVを編集する流れです。DBで直接編集はしない/できないという前提をイメージしていただければと思います。

引き続き試行錯誤してみます。ヒントなどございましたら、どうぞよろしくお願い申し上げます。

Python

1# -*- coding: utf-8 -*- 2import csv 3import datetime 4 5source = 'data\test.csv' 6with open(source, encoding="UTF-8") as f: 7 reader = csv.reader(f) 8 for row in reader: 9 try: 10 print(row[0]) 11 date_dt = datetime.datetime.strptime(row[0], "%a, %d %b %Y %H:%M:%S %z") 12 date_con = date_dt.strftime("%Y-%m-%dT%H:%M:%S:%f %z") 13 print(date_con) 14 row[0] = date_con 15 # ↓ここから先が未完成(row[0]に代入した変換済み日時データで同フィールドを上書きする操作) 16 17 except ValueError as error: 18 print(error) 19 pass

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

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

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

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

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

meg_

2020/08/27 01:42

> 手法を自力で考えている時点で詰まっています。 途中でも良いので考えた方法やコードは何ですか?
Orlofsky

2020/08/27 01:47

>行数は500行くらいです Python の行数?データの行数? 質問にうまく実行できていない現行のPythonのコードを https://teratail.com/help/question-tips#questionTips3-7 の [コード] で追記しては? CSVがデータベースから作られるのなら、同じフォーマットで出力した方がてっとり早いです。
fukazume

2020/08/27 05:42

meg_さま、Orlofskyさま、現状のコードを追記いたしました。上記「行数」はレコード行数という意図でしたので説明文に追記いたしました。ご指摘ありがとうございました!
guest

回答2

0

日付の書式変換ならこんな感じでどうでしょう。

python

1import dateutil.parser 2a = dateutil.parser.parse('Tue, 07 Apr 2020 23:00:00 +0900') 3'{0:%Y-%m-%dT%H:%M:%S.000+0900}'.format(a)

結果
2020-04-07T23:00:00.000+09:00

これで日付部分の要件は満たすと思うけど、csvをDBから出力するならDB側で処理してからでもいいかも。
その方が合理的な気もします。
例に合わせてミリ秒部分は000とし固定値にしています。

投稿2020/08/27 02:19

azzuro

総合スコア53

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

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

fukazume

2020/08/28 00:40

dateutil.parserを存じ上げませんでした。アドバイスくださり誠にありがとうございました!
guest

0

ベストアンサー

たとえばこういうモジュールがあります。細かい表記調整とかは出てきた文字列を更に追加工してみてください。リンク先に詳しく書いてありますし、他にもググったらたくさん出てきます。
Pythonのdatetimeで日付や時間と文字列を変換(strftime, strptime)

python3

1import datetime 2date_str = "Tue, 07 Apr 2020 23:00:00 +0900" 3date_dt = datetime.datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S %z") 4date_con = date_dt.strftime("%Y-%m-%dT%H:%M:%S:%f %z") 5print(date_con) 6# 出力:2020-04-07T23:00:00:000000 +0900 7# 要望:2020-04-07T23:00:00.000+09:00

投稿2020/08/27 01:57

jeanbiego

総合スコア3966

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問