X



Pythonのお勉強 Part54 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0607605
垢版 |
2017/11/23(木) 18:50:50.08ID:Gsw8xDzr
>>606
マジか!!
0608デフォルトの名無しさん
垢版 |
2017/11/23(木) 19:00:56.02ID:A7IWH6W8
>>604
全部一気に読みこむと改行て消えるんか?
0609デフォルトの名無しさん
垢版 |
2017/11/23(木) 19:49:19.59ID:DyM7pS8r
>>603
json, pickle, sqlite3好きなの選べ
0610デフォルトの名無しさん
垢版 |
2017/11/23(木) 20:13:58.63ID:EP8I35kw
  ●●●宇宙の外側に何があるのか?●●●
  http://jbbs.livedoor.jp/bbs/read.cgi/stud▲y/3729/1069922074/84-87

  この掲示板(万▲有サロン)に優秀な書き▲込みをして、総額148万円の賞金をゲットしよう!(*^^)v
  http://jbbs.livedoor.jp/stu▲dy/3729/ →リンクが不良なら、検▲索窓に入れる!
0611デフォルトの名無しさん
垢版 |
2017/11/23(木) 20:42:54.38ID:V6s4lnHY
>>608
改行はあるかも知れないけど、

その改行をすべて拾っていかないと、1行ずつ処理できない
0613デフォルトの名無しさん
垢版 |
2017/11/23(木) 21:11:52.18ID:3u99Ww5l
>>603
とりあえずCSV処理するときにsplitだのstrtokだの使うな。大人しくcsvモジュール使え。
エスケープシーケンスどころか空セルにすら対応できなくなるから。
0615デフォルトの名無しさん
垢版 |
2017/11/23(木) 21:24:21.79ID:dN4AoUwX
596です
ありがとうございます
0618デフォルトの名無しさん
垢版 |
2017/11/24(金) 10:34:27.08ID:W4G6A7kr
>>603
>>> csv_raw_data = """hoge,1,10,fuga
apple,2,20,pineapple
strawberry,3,30,mango"""
>>>
>>> print(csv_raw_data)
hoge,1,10,fuga
apple,2,20,pineapple
strawberry,3,30,mango
>>>
>>> csv_data = [[int(col) if col.isdigit() else col for col in row.split(',')] for row in csv_raw_data.split('\n')] #数字の文字列はintに変換して2次元リスト化
>>> csv_data
[['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
>>> [row[1] for row in csv_data] #2列目のデータ抜き出し
[1, 2, 3]
>>>
>>> new_col_1 = [111,112,113] #2列目のNEWデータ
>>> new_csv_data = [[new_col_1[row_idx] if col_idx==1 else col_data for col_idx, col_data in enumerate(row_data)] for row_idx, row_data in enumerate(csv_data)]
>>> new_csv_data
[['hoge', 111, 10, 'fuga'], ['apple', 112, 20, 'pineapple'], ['strawberry', 113, 30, 'mango']]
>>>
>>> new_csv_raw_data = '\n'.join([','.join([str(col) for col in row]) for row in new_csv_data]) #intはstrに変換して文字列化
>>> print(new_csv_raw_data)
hoge,111,10,fuga
apple,112,20,pineapple
strawberry,113,30,mango
>>>
0619デフォルトの名無しさん
垢版 |
2017/11/24(金) 11:33:00.39ID:W4G6A7kr
>>609がすすめるjsonは癖があるし、pickleはバイナリデータだからdumpしないと読めないし編集できないし
sqlite3はしらんけども・・、csvのデータを扱うなら>>613の言うようにcsvモジュール使うのがベストだと思う

しかし、>>603の質問を考察するに特殊なcsvを扱うわけではなく
自分で作った2次元リストの保存にcsvにするというだけなのだから>>618でいいと思う(csvモジュール勉強するのめんどいじゃん)
さらに>>618は自由にカスタマイズ可能、例えば各列の先頭をそろえるためにスペースを入れるとかなんとか
うーん、>>618がベストアンサーであると確定してしまったね
0622デフォルトの名無しさん
垢版 |
2017/11/24(金) 11:51:38.02ID:GsVE4oKd
次に値域を尋ねるべきだった
フォーマットについて話すのはそれからで良かった
0624デフォルトの名無しさん
垢版 |
2017/11/24(金) 12:42:09.24ID:znYgKojB
(自分が)使えない事を世間では「クセがある」と言うんやで
覚えとき
0626デフォルトの名無しさん
垢版 |
2017/11/24(金) 13:33:05.64ID:gyq0zbJn
雑魚にも難しいことができるように言語は進歩してきた
もっと雑魚の言い分に耳を傾けろおら
0627デフォルトの名無しさん
垢版 |
2017/11/24(金) 14:40:46.80ID:W4G6A7kr
>>603
おいっ! すごい方法を思いついちまった、天才かもしれん
2次元リストをstr()で文字列化して、それをファイルに保存
データを復元するときは、exec("value_name " + "=" + "ファイルから読み込んだ文字列”)

>>> data = [['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
>>> import re
>>> save_data = re.sub(r'(\],)','],\n', str(data)) #ファイル直接見た時に見やすいように改行挿入
>>> print(save_data)
[['hoge', 1, 10, 'fuga'],
['apple', 2, 20, 'pineapple'],
['strawberry', 3, 30, 'mango']]
>>>
>>> exec("value_name" + "=" + save_data)
>>> print(value_name)
[['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
0628デフォルトの名無しさん
垢版 |
2017/11/24(金) 14:57:34.18ID:W4G6A7kr
execよりevalの方がいいわ安全だし
>>> value_name = eval(save_data)
>>> print(value_name)
[['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
0630デフォルトの名無しさん
垢版 |
2017/11/24(金) 18:45:37.50ID:FT0GxPR+
そう卑下するな
コピペでも職人の域に逹してるなら大したもんだ
0631603
垢版 |
2017/11/24(金) 20:40:44.33ID:SOBToF3l
たくさんレスありがとさんです
pickleとかpandasとか知らなかったので大変勉強になりました。今回はファイルを直接編集する道も残しておきたかったのでcsvにしました。リードもライトもfor文がなくなってすっきりしましたw
0632デフォルトの名無しさん
垢版 |
2017/11/24(金) 21:23:09.23ID:t572wEhv
Pythonは貴方にとって何?
1. 飯の種
2. 仕事の道具
3. 趣味のツール
4. 楽しいおもちゃ
0634デフォルトの名無しさん
垢版 |
2017/11/24(金) 21:53:56.64ID:W4G6A7kr
>>631
csvモジュール使ってみたけどコレなかなか良いよ
数字の文字列を自動でintに変換してくれるようなことはしてくれないみたいだけど、なかなか良いよ

>>> import csv
>>> csv_data = [['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
>>> with open('csv_test.csv', 'w', newline='') as csvfile:
   s = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
   s.writerows(csv_data)


>>> with open('csv_test.csv', newline='') as csvfile:
   s = csv.reader(csvfile, delimiter=',')
   read_csv_data = [[int(col) if col.isdigit() else col for col in row] for row in s]


>>> read_csv_data
[['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
0635デフォルトの名無しさん
垢版 |
2017/11/24(金) 22:18:26.44ID:W4G6A7kr
ちょっと待って、ちょっと待ってぇ、>>618と比較してみようか

>>> csv_data = [['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
>>> with open('csv_test.csv', 'w') as f:
   f.write('\n'.join([','.join([str(col) for col in row]) for row in csv_data]))


57
>>> with open('csv_test.csv') as f:
   read_csv_data = [[int(col) if col.isdigit() else col for col in row.split(',')] for row in f.read().split('\n')]


>>> read_csv_data
[['hoge', 1, 10, 'fuga'], ['apple', 2, 20, 'pineapple'], ['strawberry', 3, 30, 'mango']]
>>>
うーん、こっちもナウイよね
0642デフォルトの名無しさん
垢版 |
2017/11/25(土) 16:01:20.11ID:mxSpQEHX
方言つか、JSONの仕様に従わないものはそもそもJSONじゃない。
まあツールによっては読み込み時に末尾カンマを許容していたりする場合があるけど、
それも癖というほどのものでもないだろう。
0643デフォルトの名無しさん
垢版 |
2017/11/25(土) 17:42:47.00ID:Liv5eBGp
bottleってなんでHTMLの拡張子が.tplなんだろう?pycharmでシンタックスハイライトできないじゃん
0644デフォルトの名無しさん
垢版 |
2017/11/25(土) 21:15:56.32ID:WUmHjByJ
Pythonチュートリアル読み終えたんだけど何作ればいい?
0647デフォルトの名無しさん
垢版 |
2017/11/26(日) 11:25:37.85ID:mDBTtSZ5
>>631
オレオレcsvモジュールcsv_normal.py作ってみたよ(https://ideone.com/E2XicF)
フィールドはカンマで区切り、行は改行で分けるノーマルなcsvを扱うモジュールだよ
※フィールドの左右の空白は無視するよ(stripするよ)

 ・フィールドは見やすいように文字幅を揃えて保存するよ
 ・intに変換できる文字列フィールドはintに変換するよ
 ・floatに変換できる文字列フィールドはfloatに変換するよ
 ・列の追加関数と削除関数を用意しているよ
0648デフォルトの名無しさん
垢版 |
2017/11/26(日) 11:37:41.95ID:WsfHWCB2
そんなRFCにも対応できてないゴミをわざわざ作って公開してなにが楽しいのやら。
0649デフォルトの名無しさん
垢版 |
2017/11/26(日) 11:47:38.84ID:7Eh10X3o
上にも書いたけど、それpandasで遥かに高度なことできるよ
pd.read_csvのdtypeにフィールド名と型の組み合わせの辞書を渡すだけだしastypeメソッドで特定の要素だけ後から型変えれるし
0650デフォルトの名無しさん
垢版 |
2017/11/26(日) 11:56:20.97ID:esw4gVHx
>>648
プログラマレベル1から2に上がったくらいだと
謎の全能感を持ってるから何でも楽しいのよ
0656デフォルトの名無しさん
垢版 |
2017/11/26(日) 13:46:26.16ID:d4hGNmNC
肯定意見しか認めないのもどうかと
それでも批判意見に反対するなら批判内容まで触れるべきと思います
0658デフォルトの名無しさん
垢版 |
2017/11/26(日) 13:54:24.74ID:Ry1/J8TT
>>653
例え無駄でもがんばった子を褒めるのは小学校の先生までで十分です。

公式に出てるcsvモジュールのサンプルコードをコピペ改変してデータを読み書きするまでどんなノロマでも5分もかからない作業なのに半端な独自実装を書く奴はただのアホです。
0661デフォルトの名無しさん
垢版 |
2017/11/26(日) 14:16:57.73ID:Vsmdvm4Z
虚勢を張ったコピペ職人
自覚を持ったコピペ職人
僕はね自覚を持ったコピペ職人になりたいんだ
0662デフォルトの名無しさん
垢版 |
2017/11/26(日) 14:58:36.17ID:mDBTtSZ5
ふぅー 落ち着いたか、、大興奮のレスバトルだったね、見ててワクワクしましたわ
さっきまでのワイの感想「今日はワイがスレの主役やでぇー、 キャッ、イケメンが擁護してくれてはるー、イケメン頑張れっ!」
あとは>>631の感想があれば満足やで、あっちなみにワイは1%の天才側やでぇコピペしてへんから

あと21行目とコメントがいまいちなのと、26行目のコメントが間違ってたから修正な
21行目
 # #csv_dataのインデックス4の列に[1, 2, 3, 4, 5.9, 12, 15, 16]を追加
  ↓
 # #csv_dataのインデックス4に列[1, 2, 3, 4, 5.9, 12, 15, 16]を追加

26行目
 # #csv_dataのインデックス4の列に[1, 2, 3, 4, 5.9, 12, 15, 16]を追加
  ↓
 # #csv_dataのインデックス1に列[1, 2, 3, 4, 5.9, 12, 15, 16]を追加
0667デフォルトの名無しさん
垢版 |
2017/11/26(日) 16:12:31.86ID:kUxrkBSh
うぉおおコードがキモいよぅ……

2次元配列を確保していじるあたりの雰囲気がC++っぽくてPython的ではない
というかクラス使えと

def _csvfield2str(csv_data):
"""
csvのフィールドを全て文字列に変える
"""
return [[str(field).strip() for field in row] for row in csv_data]
この辺がキモすぎる
コメント一行にしたいし二重for inを崩したいのと同じような関数が並んでいるのをどげんかしたい

その原因はこの関数か?
def _str2int(string):
なんでcsv_readで重要そうな型の概念がこんな奥底にあるんだよ
というかこの関数必要なのか
0669デフォルトの名無しさん
垢版 |
2017/11/26(日) 16:51:34.28ID:mDBTtSZ5
>>667
おっ、コード見てくれるなんて有り難いね
状態は保持しないからクラスはいらないかな、デリミタをカンマ以外に
選べるようにする場合はデリミタ保持しないとアレだからクラスにするけど

関数のコメントは増えるかもしれないし”””が好みだね
エディタの色分け表示の関係もあって”””使ってるけど、こだわりはそんなにない

内包表記の二重forは全然抵抗無いんだけど、csvは2次元配列だし、むしろ分かりやすいかと

_str2int関数とかは内包表記で使うために用意した
文字列をintにする場合、isdigit()で変換可能かどうかチェックしてというのを三項演算子で書いてたけど
長くなるし分かりにくいし、’  10 ’のような文字列だとisdigit()でFalseになるからisdigit()する前に
文字列をstrip()しないとだし、floatはどうすんの?というアレがアレでこうなったというわけです
’2e+3’とかもfloat変換に対応すると判定がわけわかめなんで、一度float変換してみてエラーならダメなのねって感じです
0672デフォルトの名無しさん
垢版 |
2017/11/26(日) 19:27:04.78ID:qKR3tC8i
業務に使わせてもらっていいですか?!
あとコメント行で俺が作ったことにして書き換えたいのですが
0674デフォルトの名無しさん
垢版 |
2017/11/26(日) 20:03:10.38ID:Ry1/J8TT
さすがに冗談だろ。
業務のコードにこんな独自実装なゴミ書いたら小一時間説教される。ていうか、俺はしたことある。
c++でstrtok使ってcsv読んでトラブル起こしたアホを。
0677デフォルトの名無しさん
垢版 |
2017/11/26(日) 21:49:03.89ID:mDBTtSZ5
ふぅー 落ち着いたか、、大興奮のレスバトルだったね、見ててワクワクしましたわ
さっきまでのワイの感想「今日はワイがスレの主役やでぇー、エェ? 業務使用の話まで来てるぅ 出典元はワイにしとけやガハハハ」
0679デフォルトの名無しさん
垢版 |
2017/11/26(日) 21:51:38.81ID:S6NQJbZd
>>678
ジーンズはリーバイス以外履くな
靴はPuma

ここからだな
0681デフォルトの名無しさん
垢版 |
2017/11/27(月) 06:18:15.08ID:+ucRUmut
俺も書いてみた
実用性のない気持ち悪くいコードを書いたつもり
import functools
save=lambda data:'\n'.join(map(','.join,map(functools.partial(map,str),data)))
def foo(s):
try:return int(s)
except ValueError:return s.strip()
load=lambda s:[list(map(foo,s.split(',')))for s in s.splitlines()]
0682デフォルトの名無しさん
垢版 |
2017/11/27(月) 12:00:08.96ID:kaiasZZ9
>>647
csv_normal.pyがバージョンアップしたよ(https://ideone.com/78qd00)

 ・フィールドに日本語が混じっていても位置ズレしないよ
 ・csvファイルの読み書きにencoding指定できるようにしたよ

pandasってフィールドに日本語混じってると列が位置ズレして表示されるでしょ?
よく知らんけど、ある意味pandas超えたわガハハハ
0683デフォルトの名無しさん
垢版 |
2017/11/27(月) 17:53:10.75ID:kaiasZZ9
>>682
csv_normal.pyが更にバージョンアップしたよ(https://ideone.com/E3CpT8

 ・クラス化したよ
    モジュール.関数でいちいち呼び出すのめんどくせーと感じ>>667ご指摘の通りクラス化したよ、快適になったよ

十分楽しんだので、これで最後にするよ
0684デフォルトの名無しさん
垢版 |
2017/11/27(月) 18:41:37.25ID:kbE8zzrJ
自ら進化を止めるとき、それは己の負けを意味するのだ。
負けるな>>683
0685デフォルトの名無しさん
垢版 |
2017/11/27(月) 18:46:50.34ID:qn8iMzPT
strtokは非スレッドセーフだったよな?
マルチスレッド環境でアホやったのかな
0686デフォルトの名無しさん
垢版 |
2017/11/27(月) 19:02:21.35ID:x+zk8UEy
Excel のCSV でも、日本語UTF-8 を扱えないのに、
文字化けしないのは、Ruby 以外では初めてかも

すごい技術力!
0687デフォルトの名無しさん
垢版 |
2017/11/28(火) 09:17:45.29ID:eQEpQbXs
車輪を作る仕事は特殊性癖の人がやればいい
普通の人はそれをどう使うかに頭使った方がいい
0688デフォルトの名無しさん
垢版 |
2017/11/28(火) 12:23:03.74ID:s1leOSNl
ちんこを踏んづける用の車輪とか?
0689遊園
垢版 |
2017/11/29(水) 02:03:12.38ID:jnHcEkAi
マはデータ管理しやすい様に隙間(行間)を無くすが、事務は見やすい様に適度に謎の改行を
入れるから、csvファイルは型を崩さずに計算して出力した方が良い。
0690デフォルトの名無しさん
垢版 |
2017/11/29(水) 09:20:15.32ID:0Jcv/v+k
クラスのプライベートなインスタンス変数定義するとき、アンダースコア1つか2つどっち使ってる?
今すごい悩んでる。
0692デフォルトの名無しさん
垢版 |
2017/11/29(水) 10:46:10.68ID:N1ji+G5b
kivyの質問いいかな?
AsyncImageってので画像表示させてるんだけど、py側から渡すファイル名が同じだと画像の中身が変わっていても表示が変わらない。どうもcacheから読み込んでるらしい。kivyファイルの方に、
. AsyncImage:
. nocache: True
. source: root.file_name
とかやってみたけどダメだった。わかる人いたら教えてくらさい
0693デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:14:26.22ID:wmbD4JNt
.reload()
0694価格が取れない(><)
垢版 |
2017/11/30(木) 02:48:08.03ID:4quHV4wq
世界の株価URL (http://sekai-kabuka.com/)から、
日経先物ミニの価格をスクレイピングしたいのだが、出来ない。
以下のコードで見ても価格が取れてない。
どうしたらいい?
XPathや正規表現で取れるかな?
誰か分かる人、お願いしますm(__)m
開発者ツールで見ると、価格が変わるとspanタブが閉じてしまうことと関係あるのかな?

import requests,bs4
from bs4 import BeautifulSoup
URL = "http://sekai-kabuka.com/";
res = requests.get(URL)
print(res.status_code)
r = res.content#html
soup = BeautifulSoup(r, "html.parser")
print(soup)
0696デフォルトの名無しさん
垢版 |
2017/11/30(木) 07:44:44.70ID:FOYY/rMw
>>691
ヤッパリそうなるよね。
けど標準ライブラリのソース見たら2つ使ってるものがあまりなかったから質問してみた。
0698694
垢版 |
2017/11/30(木) 13:15:32.27ID:4quHV4wq
>>697
thx
0701デフォルトの名無しさん
垢版 |
2017/12/01(金) 09:32:39.92ID:I+G4kv/i
いらね
0702デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:46:17.10ID:r85+E8jD
anaconda使ってるけどライブラリをcondaでインストしたりpipでインストしたりで混合してる
今は普通に動いてるけど多分後で困るよね?
0703デフォルトの名無しさん
垢版 |
2017/12/01(金) 15:06:05.69ID:vWwQdnV3
>>702
結構、困る。
0704デフォルトの名無しさん
垢版 |
2017/12/01(金) 15:08:37.42ID:vWwQdnV3
質問です:
anaconda/Jupyterで勉強していましたが、
どうしても理解できない文法とか調べるのがつらくてIDEに頼ろうと思います。
PyCharmをインストール実行できたのですが、
anacondaで作った環境との連携方法がどうしてもわかりません。
連携して使うんですよね?
0706704
垢版 |
2017/12/01(金) 16:39:36.60ID:vWwQdnV3
>>705

有難うございました。
今まで出ていた、
tokenを設定しろ、
といったエラーメッセージは出なくなりました。

?を押しても次のセルに移動せずに止まったままです。
動いているのか動いていないのか。。。

pythonw.exeじゃなくて、python.exeであってますよね。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況