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

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

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

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

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Python

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

Q&A

1回答

917閲覧

pythonの日付検索でテキストデータ内の情報をcsvファイルの同時刻の行に追記したい。

tomo_40kii28

総合スコア4

CSV

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

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Python

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

0グッド

0クリップ

投稿2020/02/25 23:23

編集2020/02/26 00:12

前提・実現したいこと

pythonの日付検索を用いてテキストデータ内の情報をcsvファイルの同時刻の行に追記したい。

具体的には各大型トラックの位置データ(一つのcsvファイル)に同時刻における拠点の荷物量(端的に言えばダンボール数。一日ごとの毎時刻のテキストデータ)を追記したいと思っております。

初めての投稿かつ初心者のため、稚拙な投稿で申し訳ございません。
お力添えを賜われればと存じます。

追記したいCSVデータ(緯度経度.csv)

2時間毎の緯度経度・積載可能量・拠点の荷物量(ヘッダーのみ)

車体A, yyyymmddhh, lon, lat, 積載可能量, 拠点荷物量(←日付検索から値を入れたい列) 2000010102, 138.00, 35.66, 100, 2000010104, 138.53, 35.67, 100, 2000010116, 139.42, 35.70, 100, 2000010108, 139.44, 35.69, 100, 2000010110, 139.88, 35.64, 100, 車体B, 2000010116, 139.42, 35.70, 90, 2000010108, 139.44, 35.69, 80, 2000010110, 139.88, 35.64, 90, ..... 車体Z, ..... 2018123122, 139.44, 35.60, 80

参照したいテキストデータ(ディレクトリ構造)

基本的に一日ごとのデータが年代順に整理され、格納されています。

拠点荷物量/yyyy/mm/荷物量_yyyymmdd.txt

テキストデータの中身(荷物量_20000101.txtの例)

4列目の荷物量を先程のcsvデータに持っていきたいです。

拠点, mm, dd, hh, 荷物量(←csvファイルに追記したい値) xxx, 01, 01, 0, 800 xxx, 01, 01, 1, 900 ・・・・ xxx, 01, 01, 23, 1000

環境

環境はPython3系となります。

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

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

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

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

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

Matsui_hero

2020/02/26 03:11

すべてのコードを一から回答するのは望ましくないので、一緒に考えていければと思います。 確認ですが、入力は「緯度経度.csv」、「荷物量_yyyymmdd.txt」で、出力は「緯度経度.csv」に荷物量を加えたものということでよろしいですか。 基本的に入力は、「緯度経度.csv」の読み込みにpandasのread_csv、「荷物量_yyyymmdd.txt」の読み込みにはglobでパスを取得し、readlinesを使用すれば良いと思います。 CSVには、 車体X, yyyymmddhh, ... のように、各「車体」の中に「データフレーム」がある形式になっていますが、 これだとデータフレームとして読み込む際に若干都合が悪いので、read_csvを使うのではない方法二したほうが良いのでお伺いしますが、この形式でお間違いないでしょうか。
tomo_40kii28

2020/02/26 03:17

ご教授ありがとうございます。 このような質問投稿を行うのが初めてなもので、大変申し訳ございません。 ご質問頂きました点につきまして 1.入力及び出力は仰る通りでございます。 2.緯度経度.csvの形式については「車体」の中に「データフレーム」がある形式で間違いございません。私もそこの扱いが一番頭を悩ませているところです。
Matsui_hero

2020/02/26 03:48

早々にご回答ありがとうございます。 >2.緯度経度.csvの形式については「車体」の中に「データフレーム」がある形式で間違いございません。私もそこの扱いが一番頭を悩ませているところです。 ということですと、pandas.read_csvで読み込むのは難しいと思います。読み込んでも、車体Aのみがデータフレームの項目として認識されますよね、きっと。 そうしますと、流れとしては、 1. 「荷物量_yyyymmdd.txt」を読み込んでデータフレームを作成する。 2. 「緯度経度.csv」をテキストファイルとしてreadlinesで1行ずつ読む。   読み込んだ各行の最初のコンマまでの文字列(yyyymmddhh)を見る。 3. 1で作成したデータフレームのyyyymmddhhと読み込んだyyyymmddhhが一致するものを探す。   一致するものがあればその荷物量を行の末尾に追記する。 4. 各行をCSVファイルに追記していく。 2〜4をファイル末尾になるまで続ける。 こんな感じでしょうか。
tomo_40kii28

2020/02/26 10:37

ご教授ありがとうございます。 こちらを参考に試行錯誤してみます!
guest

回答1

0

たたき台レベルですが、ざっくりと作ってみました。
データフレームを活用できないので、テキストファイルから日付リストと荷物量を作成して、それと比較するという形を取りました。
データフレームを活用するためには、車体ID的なのを項目に追加して、再編成したものを別のCSVファイルに保存しておくとできると思っています。

str_outputが最終的にCSVに出力する文字列です。

変なところがあるかもしれませんので、あくまでたたき台レベルとして、ご了承ください。

Python

1### txtファイルの中を読み込む(とりあえず1つのファイルを対象に) 2txt_path = '(荷物量_yyyymmdd.txtへのパス)' 3# ファイル名から年月日を取り出す 4yyyymmdd_txt = txt_path[-12:-4] # 後ろから.txtを除いて8文字抜き出すと年月日になる。 5fp = open(txt_path) 6line = fp.readline() # 最初の1行はyyyymmdd,など項目名が入っているのでスキップする。 7# line.replace(' ', '') # スペースを削除 8# item = line.split(',') # コンマで分割する(項目名) 9index_hh = 3 # hhの場所(データの何番目にhhがあるか) 10index_nimotsu = 4 # 荷物量の場所(データの何番目に荷物量があるか) 11date_list = list() 12nimotsu_list = list() 13while True: 14 line = fp.readline() 15 if not line: break 16 line.replace(' ', '') 17 data = line.split(',') # コンマで分割する 18 date_list.append(yyyymmdd_txt + data[index_hh]) # yyyymmddとhhを結合し、yyyymmddhh(date_txt)を作成する。 19 nimotsu_list.append(data[index_nimotsu]) 20 21 22# csvファイルの中を読み込む 23csv_path = '(緯度経度.csvへのパス)' 24fp = open(csv_path) 25str_output = '' 26while True: 27 line = fp.readline() 28 if not line: break 29 date_csv = line[:line.find(',')] # 左から一つ目のコンマの直前までを抜き出す。(コンマがなければ全体) 30 if date_csv in date_list: # CSVから読み出したyyyymmddhhと一致するyyyymmddhhがある場合 31 line += ', ' + nimotsu_list[date_list.index(date_csv)] # 文字列に荷物量の値を追加 # (コンマやスペースは必要かどうかに応じて調整してください) 32 str_output += line 33 str_output += '\n' 34 35

気になるところ、疑問、不具合等ございましたら、ぜひおっしゃっててください!

投稿2020/02/26 10:12

Matsui_hero

総合スコア346

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問