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

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

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

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

Q&A

1回答

4245閲覧

GPXファイルからCSVへの変換方法につきて(Python)

pixie

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/11/07 00:48

前提・実現したいこと

python初心者です。
勉強を兼ねて BeautifulSoupを使用して
GPSのログであるGPXファイルからCSVの抽出のプログラムを作成しています。

GPXファイルの一部分(変換したい部分)
<trkpt lat="35.XXXXXX" lon="139.XXXXXX">
<ele>80.700000</ele>
<time>2020-02-23T01:10:26.000Z</time>
<hdop>2.300000</hdop>
</trkpt>

※ 緯度、経度部分は一部XXXXで伏せています。

発生している問題・エラーメッセージ

高度(ele)、時刻(time)、hdopは取得でるのですが、
緯度、経度 lat="35.XXXXXX" lon="139.XXXXXX"の部分の取り方がわかりません。

初心者の質問で申し訳ないのですが、緯度、経度の取得方法について
ご教授いただければ幸いです。

該当のソースコード

python

1 2for i in soup.find_all('trkseg'): 3 ele = i.find('ele').string 4 time = i.find('time').string 5  hdop = i.find('hdop').string

試したこと

from bs4 import BeautifulSoupで
上記のコードでele,time,hdopは抽出できたのですが、
緯度、経度を取得したいと思い
for i in soup.find_all('trkseg'):
ele = i.find('ele').string
time = i.find('time').string
hdop = i.find('hdop').string
trkseg = i.find('trkseg').string
としても、緯度、経度が取得できませんでした。(緯度、経度の部分が空欄でした)

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

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

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

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

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

guest

回答1

0

属性tag['属性']でとれます。
ほか、基本的な使い方についてはBeautifulを参照ください。

Python

1from bs4 import BeautifulSoup 2from io import StringIO 3 4doc = """ 5<?xml version="1.0" encoding="UTF-8"?> 6<gpx version="1.1" creator="Wadachi - http://wadachi.cyclekikou.net/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0"> 7 <trk> 8 <trkseg> 9 <trkpt lat="35.XXXXXX" lon="139.XXXXXX"> 10 <ele>80.700000</ele> 11 <time>2020-02-23T01:10:26.000Z</time> 12 <hdop>2.300000</hdop> 13 </trkpt> 14 </trkseg> 15 </trk> 16</gpx> 17""" 18soup = BeautifulSoup(doc, 'lxml') 19for i in soup.find_all('trkseg'): 20 print( i.trkpt['lat'], 21 i.trkpt['lon'], 22 i.ele.text, 23 i.time.text, 24 i.hdop.text) 25# 35.XXXXXX 139.XXXXXX 80.700000 2020-02-23T01:10:26.000Z 2.300000

投稿2020/11/07 01:33

can110

総合スコア38278

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

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

pixie

2020/11/07 06:22

緯度、経度が取得できるようなりました。 ありがとうございました。 CSVに変更が最初の1行のみでしたので、2行目以降もCSVに変更したく 調べてみたのですが、うまい方法を見つけることができなかったのですが、 なにかいい方法がありましたら、ご教授いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問