くだすれPython(超初心者用) その21

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その20
http://toro.2ch.net/test/read.cgi/tech/1387082467/
関連スレ
Pythonのお勉強 Part49
http://toro.2ch.net/test/read.cgi/tech/1387528488/

◆関連リンク
Python の Home Page
ttp://www.python.org/

◆長いコードはこういうところにはってください
ttp://ideone.com/
ttp://codepad.org/
ttp://pastebin.com/
http://dpaste.com/

◆まとめwiki
ttp://python.rdy.jp/
2デフォルトの名無しさん:2014/01/02(木) 12:56:27.58
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
3デフォルトの名無しさん:2014/01/02(木) 12:57:08.78
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
4デフォルトの名無しさん:2014/01/02(木) 12:58:00.03
5デフォルトの名無しさん:2014/01/02(木) 13:02:30.83
前スレ990です。>>1乙。
6デフォルトの名無しさん:2014/01/02(木) 13:03:22.25
いちおつ。規制厳しいね
7デフォルトの名無しさん:2014/01/02(木) 13:14:54.45
976 名前:デフォルトの名無しさん [sage]: 2014/01/02(木) 11:50:33.13
>>975
>>973より引用
http://interactivepython.org/courselib/static/pythonds/BasicDS/stacks.html#what-is-a-stack

この一文を訳してみてね。簡単なんでしょ?
> The base of the stack is significant since items stored in the stack that are closer to the base represent those that have been in the stack the longest.
8デフォルトの名無しさん:2014/01/02(木) 14:40:22.27
>>7
単語と接続詞が多すぎて全く意味不明だな
スタックのことだろうというのはIT畑の人なら雰囲気でわかるが…
もう少し短くスマートな文を書こうという気はないのだろうか英米人は
9デフォルトの名無しさん:2014/01/02(木) 16:06:33.56
すでに2時間黙ってるけどどうしたの?癇に障った?ねえ黙ってないで答えてよ。黙らなくていいよ。黙る気ないでしょ?無理しなくていいんだよ。黙らなくていいんだよさあさあさあ
10!omikuji!dama:2014/01/02(木) 16:09:43.88
何やってんだかw
11デフォルトの名無しさん:2014/01/02(木) 16:39:20.24
新年早々ね
12デフォルトの名無しさん:2014/01/02(木) 17:18:30.56
スレが過疎なのは
Pythonがあまりにも完璧・使いやすすぎて
語る必要もないということなのだろうな
良きことだ
13デフォルトの名無しさん:2014/01/02(木) 17:48:14.14
それじゃあ質問
今居る関数の、関数オブジェクトを表している特殊変数ありませんか?
下記のような時 __self__ みたいな特殊変数があると
this = hoge_hoge_fuga_fuga しなくて済むのだけど

def hoge_hoge_fuga_fuga():
  this = hoge_hoge_fuga_fuga
  if 'x' not in this.__dict__:
    this.__dict__['x'] = 100
  this.x += 1
  print(this.x)

hoge_hoge_fuga_fuga()
hoge_hoge_fuga_fuga()
14デフォルトの名無しさん:2014/01/02(木) 18:47:32.96
>>13
特殊変数はない。スタックフレームから参照する方法はあるけど、いろいろな状況での利用を考えると面倒なのでお勧めしない。
目的によって異なるけど、考えられる代案はこんなとこ

関数定義時に関数オブジェクトを参照し属性を設定する -> デコレータが使える
値を持つ、呼び出し可能なオブジェクトを作りたいなら __call__ を調べてみよう
クロージャ的な用法(関数内にデータを内包したい)なら、ジェネレータにするといい。@see also itertools.count

ideone.com/mFBFqg
15デフォルトの名無しさん:2014/01/02(木) 19:06:36.30
すみません、初心者なんですが以下の日本語部分がすべて文字化けしてしまいます。
.pyファイルを秀丸などでutf-8nで保存しても次開くとSJISになってしまっているのでそれが原因でしょうか?
解決方法を教えてください。。

# -*- coding: utf-8 -*

import urllib2
from BeautifulSoup import BeautifulSoup

url = "YahooTOPのURL"
soup = BeautifulSoup(urllib2.urlopen(url).read(), fromEncoding='utf-8')

print soup
16デフォルトの名無しさん:2014/01/02(木) 19:09:39.12
>>14
ありがと。無いなら諦めるw
使用目的は、単に関数内スタティック変数として使うため。
入力と結果が1対1で対応してる処理が重たい関数で、
結果を辞書にキャッシュさせるのにスタティック変数は良く使うので
17デフォルトの名無しさん:2014/01/02(木) 19:44:33.61
>>15
そのurlって実在するの?
日本語を含むurlなんて聞いたことがないんだが
18デフォルトの名無しさん:2014/01/02(木) 19:49:04.57
>>15
文字列前にuをつけてみて
str型ではなくunicode型じゃないとうまくいかない

>>16
横からだけど、そういうことならグローバル直下に辞書をおくといいよ
python3だったらfunctools.lru_cacheをつかうのもいいよ
19デフォルトの名無しさん:2014/01/02(木) 20:31:40.15
>>15
>.pyファイルを秀丸などでutf-8nで保存しても次開くとSJISになってしまっているのでそれが原因でしょうか?
ファイルに日本語がなくてASCIIだけだったら、エディタの文字コード判別がデフォルトのSJISとみなしているんじゃないかな。ソースに日本語のコメント入れて保存してみそ。
それでこれは問題の文字化けとは多分関係ない。

yahooトップページって文字コードutf-8だっけ?その辺が怪しそうな気がする
20デフォルトの名無しさん:2014/01/02(木) 20:37:45.39
>>17
URL規制で書けなかったので日本語にしてました
>>18
soup = unicode(soup.prettify(), soup.originalEncoding)
すみません、色々調べてこれ入れたらできました!
>>19
あーSJISのままなのはそういう意味だったんですね。。スッキリしました。yahooはutf-8でした!

皆さんありがとうございました
21デフォルトの名無しさん:2014/01/02(木) 20:39:20.74
>>15
print soup.decode('utf-8')
こうかな?
22デフォルトの名無しさん:2014/01/02(木) 20:46:04.09
>>21
それだとエラーでました。
TypeError: 'NoneType' object is not callable
23デフォルトの名無しさん:2014/01/02(木) 23:22:59.34
>>16
そういった用途なら functools.lru_cacheに+1

スタティック変数について、他の代案も紹介しておくと、
グローバルの代わりにデフォルト引数に辞書を入れて、スタティックな領域として使う方法もある

注意点として、Pythonではデフォルト引数の評価タイミングが関数定義時なので、
他の言語からの人がコードを読んだ時、解りにくくなるという懸念はあるけど、
キャッシュに使う辞書を引数に与えられるので、関数の単体テストはしやすくなります
24デフォルトの名無しさん:2014/01/03(金) 02:16:58.20
b'2966'を整数型の2966に直すにはどうしたらいいのでしょうか
2524:2014/01/03(金) 02:18:58.97
>>24 python3.3を使っています
26デフォルトの名無しさん:2014/01/03(金) 02:30:36.06
>>24
int(b'2966'.decode('utf-8'))
かなあ?
2724:2014/01/03(金) 02:33:54.86
>>26
出来ました!
ありがとうございます
28デフォルトの名無しさん:2014/01/03(金) 02:34:54.92
int(b'2966')だけじゃだめなのか
2924:2014/01/03(金) 02:42:01.88
>>28
それでいけました
ありがとうございます
30デフォルトの名無しさん:2014/01/03(金) 07:52:37.85
pythonを2.6から2.7へバージョンアップしたら
インストールしたモジュール使えなくなったんですけど
これは参照している場所が違うからでしょうか
OSはMACです
31デフォルトの名無しさん:2014/01/03(金) 08:44:13.17
>>18>>23
ありがと
標準ライブラリにキャッシュ機能を提供してくれるものがあったとはPythonすげー
デフォルト引数に辞書の方法は、簡単で便利ですね
32デフォルトの名無しさん:2014/01/03(金) 16:13:53.83
ja.wikipedia.org/wiki/Flask
軽量ウェブアプリフレームワーク Flask の解説で、

以下のサンプルコードは、ルートパスにアクセスすると "Hello World!" を表示するだけのアプリケーション
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
 return "Hello World!"
if __name__ == "__main__":
 app.run()
↑こんなのがあります。この appオブジェクトはどうして hello() の存在を認識できているんでしょうか? どうか解説をお願いします。
@〜 は関数アノテーション?、これもよく分かっていません。
33デフォルトの名無しさん:2014/01/03(金) 16:44:09.72
3432:2014/01/03(金) 18:54:01.59
class App:
 def __init__(self):
  self.dic = {}
 def route(self,key):
  def proc(fun):
   self.dic[key] = fun
  return proc

myapp = App()

@myapp.route("/")
def foo():
 return "Welcome!"

@myapp.route("/menu")
def foo():
 return "Sorry, Japanese Only!"

myapp.dic["/"]()
=> "Welcome!"
myapp.dic["/menu"]()
=> "Sorry, Japanese Only!"

ありがとうございます。ほぼ理解できました。
35デフォルトの名無しさん:2014/01/04(土) 00:01:18.74
そんな彼に忍び寄る恐ろしい罠
36デフォルトの名無しさん:2014/01/04(土) 23:07:58.70
>>30 まずそのモジュールの2.7用が出てないかじゃないでしょうか。
37デフォルトの名無しさん:2014/01/07(火) 16:31:27.57
>>8
最近みた日本語の悪文だとこんなのがある
http://ja.wikipedia.org/wiki/%E4%B8%B8%E4%BA%95
38デフォルトの名無しさん:2014/01/08(水) 00:08:29.85
>>37
読解にメモリ馬鹿食いする文章だな
39デフォルトの名無しさん:2014/01/08(水) 13:40:33.62
num = 10
self.board = [[0]*num]*num
for i in board:
 for j in i:
  j = 1

こんな風にやっても案の定書き換えられてないんですけど!
リストを書き換えるスマートな方法を教えて欲しいんですけど!
盤面のオブジェクトを作って色んな書き換えるメソッドを呼び出して何度も書き換える予定なんですけど!
とりあえずライフゲーム作るんですけど!
40デフォルトの名無しさん:2014/01/08(水) 15:25:06.10
http://pastebin.com/Cba1PTZg
こういうのとか
>>> import test
>>> f = test.Foo(3)
>>> f.update_list(3)
>>> print(f.get_list())
[[3, 3, 3], [3, 3, 3], [3, 3, 3]]
4139:2014/01/08(水) 16:09:58.94
>>40
ありがとうございます
map関数の使い方を勉強してきます
42デフォルトの名無しさん:2014/01/08(水) 17:25:57.03
a = [[0]*3]*3
print(a)
a[1][1] = 1
print(a)

の実行結果が
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
になります

期待してる結果は
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
です
これは一体何が起こっているのでしょうか
助けてください

Version : 3.3.3
Version tuple: ('3', '3', '3')
Compiler : MSC v.1600 32 bit (Intel)
Build : ('v3.3.3:c3896275c0f6', 'Nov 18 2013 21:18:40')
43デフォルトの名無しさん:2014/01/08(水) 17:35:05.69
ちなみに、python2と3でmap関数の返り値違う
python2はリスト型
>>> type(map(add, a))
<type 'list'>
python3はmap型
>>> type(map(add, a))
<class 'map'>

map型のイテレータは一度処理終わったら、もどってくれないから注意
>>> b = map(add, a)
>>> list(b)
[2, 3, 4]
>>> list(b)
[]
44デフォルトの名無しさん:2014/01/08(水) 17:40:29.16
>>42
参照だから
>>> id(a[0][1])
139713178044032
>>> id(a[1][1])
139713178044032
>>> id(a[2][1])
139713178044032
[0]*3
45デフォルトの名無しさん:2014/01/08(水) 17:42:33.42
最後の行は無視して
46デフォルトの名無しさん:2014/01/08(水) 17:57:47.61
>>42
あなたの希望は以下で満たせるはず。
後は自分で頑張って勉強して、それでも分からなければまた聞きに来て。
>>> a = [[0] * 3] * 3
>>> print(a)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> for x in a:
... print("id(x) =", id(x))
...
id(x) = 140290763245184
id(x) = 140290763245184
id(x) = 140290763245184
>>> a[1][1] = 1
>>> print(a)
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
>>> a = [None] * 3
>>> for i, x in enumerate(a):
... a[i] = [0] * 3
...
>>> print(a)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> for x in a:
... print("id(x) =", id(x))
...
id(x) = 140290763245544
id(x) = 140290763244464
id(x) = 140290763245184
>>> a[0][0] = 1
>>> a[1][1] = 1
>>> a[2][2] = 1
>>> print(a)
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
4742:2014/01/08(水) 18:13:05.04
>>44,46
ありがとうございます
頑張ります
4842:2014/01/08(水) 18:17:03.24
リストの初期化の仕方で参照するところが変わるんですね
完全に嵌ってました
49デフォルトの名無しさん:2014/01/08(水) 18:24:27.06
>>48
Python的にはノート(2)より
ttp://docs.python.jp/3.3/library/stdtypes.html#common-sequence-operations
[[0] * 3 for i in range(3)]
ミュータブルな要素のみ内包表記に置き換える感じで
50デフォルトの名無しさん:2014/01/08(水) 18:25:10.19
あとはリスト内包表記使うとか
>>> a = [[0 for row in range(3)] for row in range(3)]
>>> a[1][1]=1
>>> a
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
51デフォルトの名無しさん:2014/01/09(木) 01:12:22.59
ライフゲームってDemoに有ったような気がして、探してみたけど、
ソースから入れないと入らないのかな。./Tools/demo/life.py

替わりにこんなの見つけた

# タートルのデモ
> python3 -mturtledemo

# tkのデモをpythonから実行
from tkinter import Tk
tk = Tk()
tk.eval("source c:/Python33/tcl/tk8.5/demos/widget")
tk.mainloop()
52デフォルトの名無しさん:2014/01/11(土) 21:56:49.85
>>> a=[1,2,3,4,5,0]
>>> [(i, x) for i, x in enumerate([x for x in a if x >= 3], start=1)]
[(1, 3), (2, 4), (3, 5)]

こういう風に、リストから条件を満たす要素だけ抜き出して
連番を付与してタプルのリストを作る目的がある
しかし、入力がリストではなく以下のようなテキストファイルの場合
1
2
3
4
5
0

enumerateの行にファイル読み込み処理をぶち込んでコードを短い
ままで済ますことは可能だろうか?
調べてみたのだが、ワンライナーでファイル処理を行う例が見つからなかった
53デフォルトの名無しさん:2014/01/11(土) 22:15:37.35
>>52
openも一緒にやりたいってこと?
54デフォルトの名無しさん:2014/01/11(土) 22:29:12.77
>>52
自分も初心者だけど

f = open('data.txt')
[(i, x) for i, x in enumerate([x for x in map(lambda s:int(s.rstrip('\r\n')), f) if x >= 3], start=1)]
55デフォルトの名無しさん:2014/01/11(土) 22:29:54.85
>>53
そう
スクリプト言語の用途として
テキストフィルタ的なものはよく出会うので
ファイル処理を短く済ます定番句があると
楽だなあと思う次第
56デフォルトの名無しさん:2014/01/11(土) 22:39:24.75
>>54
おおっと書いたとたんにレスが
サンクス
そのopenも一行にまとめてしまえないだろうかという話
57デフォルトの名無しさん:2014/01/11(土) 22:41:17.49
じゃあ…

[(i, x) for i, x in enumerate([x for x in map(lambda s:int(s.rstrip('\r\n')), open('data.txt')) if x >= 3], start=1)]
58デフォルトの名無しさん:2014/01/11(土) 22:43:51.34
>>55
with open('data.txt') as f: l = []
で一行にはなるけど,短くはむりぽ
59デフォルトの名無しさん:2014/01/11(土) 22:51:26.70
>>57
カッコだらけなんだけど、インデントで書けないものか....
60デフォルトの名無しさん:2014/01/11(土) 22:53:46.58
>>59
1行で書きたいのか複数行で書きたいのどっちなんだよw
61デフォルトの名無しさん:2014/01/11(土) 23:15:42.68
tkinterっていろいろできそうなのに
あんまりはやってないようなのはなぜ?

ここのサイトが超わかりやすい!
http://www.shido.info/py/tkinter1.html
62デフォルトの名無しさん:2014/01/11(土) 23:21:44.22
リストの値をそれぞれ総当たりで含まれるかどうかをチェックして、含まれていれば削除したいんですがどうやればいいでしょうか?

list['abc','abcd','bcd','bbt','yyf','zat']を
list['abcd','bbt','yyf','zat']にしたい

for s in range(len(list)):
 x = list.pop()
 for k in list:
  if not x in k:
   list.append(x)

これだとうまくいきませんでした
63デフォルトの名無しさん:2014/01/11(土) 23:29:01.42
>>62
リストの中の要素が重複してないならset使ったほうが楽かも

l = ['abc','abcd','bcd','bbt','yyf','zat']
k = ['abc','bcd']

egg = list(set(l) - set(k))
64デフォルトの名無しさん:2014/01/11(土) 23:30:05.70
あ,どうせ消すんだから重複関係ないか・・・
65デフォルトの名無しさん:2014/01/12(日) 00:15:57.50
PythonってRubyのRakeみたいなビルドとか自動化に使えるスクリプト
ツールってあるの?
66デフォルトの名無しさん:2014/01/12(日) 00:22:45.66
GYP
67デフォルトの名無しさん:2014/01/12(日) 00:25:00.51
Sons
68デフォルトの名無しさん:2014/01/12(日) 02:30:10.24
x Sons

o SCons
69デフォルトの名無しさん:2014/01/12(日) 05:45:41.99
awkみたいな行に対して処理をする起動オプションはない。
よくあるファイル処理のスクリプトはfileinputモジュール使う
sedのようなinplaceなファイルの書き換えも支援してくれる。

ワンライナ自体python向きではないけど、一応短くしてみると

ファイルから数列を読み込むのは、
intは前後の空白文字取り除いて変換してくれるので map(int, open("data.txt")) で済むよ。

[(i,x) for i,x in enumerate(...)] は list(enumerate(...)) 用途によってはlist()も不要。
70デフォルトの名無しさん:2014/01/12(日) 09:36:05.29
Pythonでコーディングされてるオープンソースのソフトってどんなのがあるの?
71デフォルトの名無しさん:2014/01/12(日) 09:42:19.69
全くありません
ゼロです
72デフォルトの名無しさん:2014/01/12(日) 09:47:40.52
>>70
http://ja.wikipedia.org/wiki/Pythonを使っている製品あるいはソフトウェアの一覧

一部 Python で書かれてる的なのも含まれてるので注意
73デフォルトの名無しさん:2014/01/12(日) 09:53:04.05
Sourceforgeだとこれかな
http://sourceforge.jp/softwaremap/trove_list.php?form_cat=178
(プログラミング言語にPythonを使用しているプロジェクトの一覧)
74デフォルトの名無しさん:2014/01/12(日) 10:27:14.21
75デフォルトの名無しさん:2014/01/12(日) 13:26:16.84
76デフォルトの名無しさん:2014/01/12(日) 16:04:00.58
ゴミコードがいくら沢山集まっても、それはゴミの山である
                    ―カーニハン―
77デフォルトの名無しさん:2014/01/12(日) 16:27:44.37
>>62
pythontutor.com/visualize.html

ここにコード書いてステップ実行すると、
1ステップ毎に変数やリストのデータがどのように変化するか表示してくれるので解りやすいよ。

同じリスト内の重複を取り除くのか、2つのリストから差分を除くのか
題意が読み取れなかったけど。リストで順序を保つなら collections.OrderedDict.fromkeys(xs).keys()
78デフォルトの名無しさん:2014/01/12(日) 17:40:57.01
>>62
import __builtin__
list = ['abc','abcd','bcd','bbt','yyf','zat']
gomi = []
for i in range(len(list)):
  for j in range(len(list)):
    if i != j:
      if list[i] in list[j]:
        gomi.append(list[i])
        break
print __builtin__.list(set(list) - set(gomi))
79デフォルトの名無しさん:2014/01/12(日) 18:18:34.03
>>62
L = ['abc','abcd','bcd','bbt','yyf','zat']
k = ['abc','bcd']
for i in range(len(L)-1, -1, -1):
 if L[i] in k:
  del L[i]
print(L)
80デフォルトの名無しさん:2014/01/12(日) 18:21:28.98
含まれるって文字列中にって事だったのか.これで合ってる?

src = ["abc", "abcd", "bcd", "bbt", "yyf", "zat"]
dst = [x for x in src if all(not x in y for y in src if x != y)]
print(dst)
81デフォルトの名無しさん:2014/01/12(日) 18:22:18.95
なぜ多くのプロジェクトがPythonの古いバージョンをサポートし続けるのか
ストーリー by headless 2014年01月12日 12時55分
http://developers.slashdot.jp/story/14/01/11/2115245/
82デフォルトの名無しさん:2014/01/12(日) 18:25:49.84
not any にした方が効率よかったかも

dst = [x for x in src if not any(x in y for y in src if x != y)]
83デフォルトの名無しさん:2014/01/12(日) 18:33:34.51
>MozillaのNathan Froyd氏は、Szorc氏の主張はソフトウェアを他の人々に提供する側の視点が欠けていることを指摘している。
>ユーザーがアップグレードを自由に行えるとは限らず、新しいバージョンで削除されたAPIを必要としていることもあるし、
>新しいバージョンで動作するようにコードを修正してテストするのは手間がかかる。

これ何の冗談だよ
クソいラピッドリリースをFireFoxに導入しくさってくださりやがりましたMozillaお前がその発言すんのかよ
コブラに噛まれて死ね
5回死ね
84デフォルトの名無しさん:2014/01/12(日) 18:36:56.81
ワロタ
85デフォルトの名無しさん:2014/01/12(日) 19:15:41.16
>>82
src = ['abc','abcd','abcd','abcd','bcd','bbt','yyf','zat']
↑こんな風に重複したものがあると残るからインデックスで比較するのがよさげ

dst = [x for i,x in enumerate(src) if not any(x in y for j,y in enumerate(src) if i!=j)]

多重ループ出来るの今日初めて知ったthx
86デフォルトの名無しさん:2014/01/12(日) 19:19:47.69
>>81
こっちでやろうや
http://toro.2ch.net/test/read.cgi/tech/1387528488/
>>62への回答の邪魔になりそうだし
8785:2014/01/12(日) 19:25:20.62
ごめん間違い、インデックスだけじゃ無理か
88デフォルトの名無しさん:2014/01/12(日) 19:45:10.90
dst = [x for i,x in enumerate(src) if not any(x in y for y in src if x!=y) and x not in src[i+1:]]
89デフォルトの名無しさん:2014/01/12(日) 19:46:42.42
http://ideone.com/gMl6bw
関数型?っぽく
90デフォルトの名無しさん:2014/01/12(日) 19:50:50.66
>>88
自分のプログラミングレベルだと、その内包表記の詰め込み具合はきつい
91デフォルトの名無しさん:2014/01/12(日) 19:52:43.69
>>85
リスト要素の重複は、予め取り除いてから篩いに掛けた方がいいかな。
ループの回数も抑えられるし。
9282:2014/01/12(日) 20:44:55.26
展開するとこんな感じ

dst = []
for x in src:
 for y in src:
  if x in y and x != y:
   break
 else:
  dst.append(x)

ここのelseは、ifではなく、内側のforに対応するelse。breakで抜けなかった時に実行されます。

結果から重複を取り除く場合は、for y の前に if x in dst: continue で対応。
93デフォルトの名無しさん:2014/01/12(日) 22:30:52.10
ttp://ideone.com/lRddti

os.path.isfileとos.path.existsがうまく行きません
存在しているのにFalseになったり
存在しないのにTrueになったりします

なにか勘違いしているところありますでしょうか?
python33です
9493:2014/01/12(日) 22:41:32.79
すいません
なんでもなかったです・・・
95デフォルトの名無しさん:2014/01/12(日) 23:00:40.74
#set(src)の要素のうち、他のどの要素の一部(部分文字列)になっていないもののリスト(順番が変わっちゃうけど)
#src = ['abc', 'abcd', 'abcd', 'abcd', 'bcd', 'bbt', 'yyf', 'zat']
#なら dst = ['abcd', 'yyf', 'zat', 'bbt']
dst = [x for x in set(src) if all(x not in y for y in set(src)-set([x]))]

内包表現は書いた本人ですら後で分んなくなることがあるから困るけど好き。
96デフォルトの名無しさん:2014/01/12(日) 23:16:56.22
>>93
パス(fpath)じゃなく数値(a)を渡してる
97デフォルトの名無しさん:2014/01/13(月) 00:41:46.88
>>92
オリジナル(>>82)が関数型の内包表記で書かれているんだから、
わざわざ手続き型で書き直すでのはなく、
まず最初は以下のように展開するのがPythonらしいと思ふ

dst = [
  x for x in src
    if not any(
      x in y for y in src
        if x != y
    )
]
98デフォルトの名無しさん:2014/01/13(月) 00:51:12.78
繰り返し中での一時オブジェクト生成は、極力排除した方が実行効率良いよ。

# >>62
from collections import OrderedDict
unique = lambda xs: OrderedDict.fromkeys(xs).keys()

src = unique(['abc', 'abcd', 'abcd', 'abcd', 'bcd', 'bbt', 'yyf', 'zat'])
dst = [x for x in src if not any(x in y for y in src if x != y)]
9962:2014/01/13(月) 03:07:06.89
>>62です
うわこんなにレスをいただいてしまってなんかすみません・・・
質問の後にmapや再帰?でやってみてたんですが上手く行かず困っていました
いただいたレスを一つずつ試して見ます
ありがとうございました!
100デフォルトの名無しさん:2014/01/13(月) 09:42:32.16
特定のフォルダを五分おきくらいに見て、新たに作成されたファイル名を
把握するっていうサーバー的アプリを作りたいが、監視でCPU100%になるのを
防ぐためには、スレッドという機能を使えばよいのかな?

何をしたいかというと、クライアントPCからサーバーのフォルダにファイルを
コピーすることで仕事のトリガーとするシステムを妄想しているのだ
WEB系の技術でやるべきものだろうけど、そっち系の知識がゼロなので
101デフォルトの名無しさん:2014/01/13(月) 10:03:27.10
>特定のフォルダを五分おきくらいに見て、新たに作成されたファイル名を
>把握するっていうサーバー的アプリを作りたい
で運用に支障がでるほど、負荷がかかるとは思えない
サーバ的ってあるけどクライアント的な部分はどいういうものなの

>>100が作ろうとしてるものと、答えようとする人間の想像するものが違ってるくるかもしれないから
ディレクトリ内のファイル数とかも含めてもうちょい詳しく書いたほうがいい
102デフォルトの名無しさん:2014/01/13(月) 10:05:06.45
すぐ作れるんだし作ってから色々と試してみる方がいいような
103デフォルトの名無しさん:2014/01/13(月) 10:06:01.70
>>100
time.sleep で大丈夫だと思うけど

そういったシステムなら、ファイルシステムのイベント通知が使える。
watchdogというクロス・プラットフォームなライブラリがあるよ。
104100:2014/01/13(月) 10:14:21.71
101読んで、再考

もしサーバってのがサーバ・プログラムのプロセスを指してるんだったら、
シングル・プロセスなサーバのプロセス内でsleepしちゃまずいか。
バックグラウンド・ジョブを想定してた。

でも、トリガにwatchdogは使えるので、後は適当なプロセス間通信の方法調べてがんばって。
105103,104:2014/01/13(月) 10:17:43.86
番号間違えた。104の名前欄訂正 100>103
106デフォルトの名無しさん:2014/01/13(月) 10:41:12.68
>>101
妄想を書いてみる
これらを全部PythonとWindowsのバッチファイルでやろうという試み
Web系って覚えることが多すぎて自分には無理
(ちなみに自分はただの事務員。金がないからお前が作れと言われた)

クライアントPCの仕様
・リクエスト内容を示すテキストファイルを作る
・Windowsのネットワークドライブ経由、バッチファイルで
サーバーのリクエスト受付フォルダに上記ファイルをCOPYする

ファイル数など
・クライアントPCは20台くらい、PCごとに一日10リクエストくらい、計200個のファイルを処理
・リクエストタイミングは不定

サーバーの処理内容
・データベースを持ち、リクエストに応じ検索・加工をした結果をCSVファイルに吐き出す

サーバーで処理した結果の返し方
・サーバー上にあるクライアントPCごとの返信専用フォルダに結果ファイルを格納
・クライアントPC操作者は頃合いを見て上記フォルダをエクスプローラで覗き持って行く
107デフォルトの名無しさん:2014/01/13(月) 11:13:52.76
妄想ならチラシの裏にでも書いてろ
108デフォルトの名無しさん:2014/01/13(月) 16:50:06.40
a = 0xd
b = 13
を区別する方法ってありますか?
0xdを評価するときに,13になるのでしょうか?
109デフォルトの名無しさん:2014/01/13(月) 17:08:17.89
ないよ
16進数を理解できてないの?
110デフォルトの名無しさん:2014/01/13(月) 17:51:31.41
>>109
すみません.確かにその通りですね
111デフォルトの名無しさん:2014/01/14(火) 14:45:18.06
pyDevを使ってます
変数名の候補が出てこないんですが どうしたら出るようになりますか?
例えば

name = "a"
na

↑ここで name が出てほしいんですけど何も出ません
112デフォルトの名無しさん:2014/01/14(火) 14:52:23.00
> To enable code completion, go to Window > Preferences > Pydev > Editor > Code Completion, and check the 'Use Code Completion?'
http://stackoverflow.com/questions/491053/no-code-completion-and-syntax-highlighting-in-pydev

PyDev持ってねーから知らんけどこのへんでどうよ
113111:2014/01/14(火) 14:53:31.32
自己解決しました すみません
114デフォルトの名無しさん:2014/01/15(水) 20:10:26.97
とりあえずはいろんなデータを分析・解析したり、
必要なデータをすぐにアウトプットできるようなプログラムを作ってみたい

とりあえず入門としてPythonスタートブックっていうのを読んでみたんだけど、
次の参考書としておすすめの本ってありますか?
115デフォルトの名無しさん:2014/01/15(水) 20:11:22.32
PythonじゃなくてRの本にすればいい
116デフォルトの名無しさん:2014/01/15(水) 20:15:15.41
Pythonの勉強しておけばあとあといろんな応用がきくかなと…
117デフォルトの名無しさん:2014/01/15(水) 21:07:20.79
NumPyのマニュアルを読めばいいよ
118デフォルトの名無しさん:2014/01/15(水) 22:57:01.19
オレンジ色の本(本の名前失念)
119デフォルトの名無しさん:2014/01/16(木) 01:58:58.78
O'ReillyのPythonによるデータ分析入門
120デフォルトの名無しさん:2014/01/16(木) 11:34:54.23
全くの初心者で申し訳ないのですが
__init__のクラスの初期化って一体何のために必要なんですか?
121デフォルトの名無しさん:2014/01/16(木) 12:02:34.80
インスタンス生成時にそのクラスを使う上で必要なオブジェクトを受け取るため

そのクラスを使うほうからしたら、あとになってからこれ要るよって言われるより
最初に言われたほうが書きやすい
>>> rq = urllib.request.Request()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'url'
122デフォルトの名無しさん:2014/01/16(木) 17:29:23.08
>>121
ありがとう
じっくり考えてみる
123デフォルトの名無しさん:2014/01/17(金) 00:57:49.42
import sqlite3

con = sqlite3.connect('a.db')
with con:
  ここでロールバックしてwithを抜けるスマートな方法って何かない?

例外を投げてwithの外側で捕捉する方法だと
インデントが深くなるからそれ以外でお願いします。
124123:2014/01/17(金) 01:02:20.10
書き忘れましたがバージョンは2.6でお願いします
125デフォルトの名無しさん:2014/01/17(金) 05:21:27.27
自分でrollback呼んで抜ければいいだろ・・・
頭固いぞ
126デフォルトの名無しさん:2014/01/17(金) 06:26:36.31
ロールバックがどうのといってるけど、たぶん質問の本質はそっちじゃないんだと思う

Q. withブロックを途中で抜けたい

こうでしょ?

A. 今のところbreakのような安直な方法はないので
自分でwhileやdefみたいなブロックを作ってください
127デフォルトの名無しさん:2014/01/17(金) 06:33:10.03
あ、当然インデントが深くなります
インデントが深くなるのが嫌ならPythonは使わないことです
128デフォルトの名無しさん:2014/01/17(金) 12:35:52.48
インデントが深くなるのを抑制する用途にも with は使えるよ。
2.6だと contextlib.nestedが必要かも知れないけど、with に複数のcontext managerを列挙できる。

>with を途中で抜ける

例外を使う。withの外に例外を伝えたくなければ、特定の例外を捕捉するcontext managerを併用する。

@contextlib.contextmanager
def pass_exc(*exc_types):
 try:
  yield
 except exc_types:
  pass

class BreakContext(Exception): pass

with pass_exc(BreakContext), con:
 raise BreakContext
129128:2014/01/17(金) 12:46:21.22
sqlite3.Connectionの__exit__では、例外があったら rollback なければ commit を呼ぶので、
上の例では con を先にするか後にするかで、例外が伝わるかどうかが変わってくる点に注意が必要。

その辺の制御の流れは、少し判り辛いので、
望みの振る舞いをするトランザクションのcontext managerを書き下す方が良いかもしれない。

2.6のwhat's new や PEP343 にトランザクションのcontext managerの実装例が載ってます。
130デフォルトの名無しさん:2014/01/17(金) 13:01:07.24
関数はwith の外に置けばインデント深くならないけど、
この場合、例外を使わずrollbackするには明示的に呼ぶ必要があり

def do_something(con):
 return con.rollback()

with con:
 do_something(con)

スマートさに欠ける点は、これだとwith抜けるときにcommit()も呼び出される。
rollback直後でinTransactionフラグがfalseになってるから、
データベースにCOMMITは発行されないけど。ここは commitメソッドの実装依存。
131デフォルトの名無しさん:2014/01/17(金) 20:18:20.92
すみません。教えて下さい。
以下のように3つ関数があって、test1⇒test2⇒test3の順に処理を流したいのですが、
test1でえられたitemをtest2で使えるようにして、test2でえられたlistをtest3の処理の中で使用したいのですが
どういう風に記述したらいいでしょうか?初歩的ですみません..

def test1()
...
return item

def test2()
...
return list

def test3()
#

#実行
test1()
test2()
test3()
132デフォルトの名無しさん:2014/01/17(金) 21:20:22.07
>>131

def test1()
...
return item

def test2(i)
...
return list

def test3(l)

i = test1()
l = test2(i)
test3(l)
133デフォルトの名無しさん:2014/01/17(金) 21:26:22.71
>>132
神!ありがとうございます!
134デフォルトの名無しさん:2014/01/17(金) 21:56:58.90
>>133
頑張ってくれ
135デフォルトの名無しさん:2014/01/17(金) 22:46:20.73
関数型っぽいの
def add(n):
 return n+1

def multiply(n):
 return n*10

def divide(n):
 return n/2

num_list = [1,2,3]

added = map(add, num_list)
multiplied = map(multiply, added)
divided = map(divide, multiplied)
136デフォルトの名無しさん:2014/01/17(金) 23:53:27.77
>>135
プロファイル取ってみればわかると思うけど、
Pythonで関数型っぽいコードは大抵、実行効率が良くないよ。

関数型の概念等はとても有用だけど。関数型の言語に比べると処理系の実装が適してない。
python流(?)に書いた方が保守もしやすく(Pythonでは)効率良い

[(x+1)*10/2 for x in [1,2,3]]
137デフォルトの名無しさん:2014/01/18(土) 00:21:48.56
mapとかfilterを上手く使えるとちょっと世界が広がる感じがするよねw
いまだにreduceはピンとくる使いどころがわからないけど
138デフォルトの名無しさん:2014/01/18(土) 01:03:26.08
>>137

reduce使った関数合成と、無理やり使ってみた感のある応用例書いてみた。興味あったら、どぞ。
ideone.com/vN8PuJ

reduceはリストを順に処理して、最終的にひとつの要素に収束するような処理に用いるのだけど、
Pythonでreduceを使う局面は、普通にforループの手続きで書いた方が良いよ。
139デフォルトの名無しさん:2014/01/18(土) 02:48:09.02
Pythonでもreduceの結果は一つの要素に限らないんじゃないの?
原始帰納関数はすべてfold(reduce)で再実装できるというのがミソ
140デフォルトの名無しさん:2014/01/18(土) 14:30:44.02
>>139
(Pythonの)reduce関数の実装を指してのことならyes
初期値を取れるから、foldのようにも使える。
141デフォルトの名無しさん:2014/01/19(日) 02:50:12.78
今日の0時のdatetimeを取得したいのですがどうすればいいでしょうか?
142デフォルトの名無しさん:2014/01/19(日) 03:30:12.94
スクリプト実行中に発生したエラー・例外をloggingでファイルに書き出したいです
検索するとだいたい以下のようなサンプルが出てきます
try:
 ここでエラー発生
except:
 logging.error(~~)

これだとtryでキャッチしている箇所でないとファイルに書き出せません
そうではなく、どこでエラーが起きても全てファイルに書き出すにはどうすればいいのでしょうか
143デフォルトの名無しさん:2014/01/19(日) 03:44:05.51
全部tryにいれればいいじゃん(いいじゃん)
144デフォルトの名無しさん:2014/01/19(日) 04:50:19.59
>>141

midnight = datetime.fromordinal(datetime.date.today().toordinal())

>>142

logging用途なら sys.excepthook はどう?
145144:2014/01/19(日) 05:10:30.55
訂正 モジュール名忘れてた
datetime.fromordianl -> datetime.datetime.fromordinal
146デフォルトの名無しさん:2014/01/19(日) 05:26:39.90
>>145
ありがとうございました。そのような便利メソッドがあることを知りませんでした。
ドキュメントを読みなおしてみます。
147デフォルトの名無しさん:2014/01/19(日) 13:41:26.28
twitterのAPIを叩くためにpython-twitterを使ってみたんだけど、なぜかエラーが出まくりで、仕様変更で使えなくなってるメソッド
がいくつかある模様。
tweepyの方は使いやすいですか?
148デフォルトの名無しさん:2014/01/19(日) 15:03:05.45
自分はGitHubからDLしたtweepy使ってbot作りました。
149デフォルトの名無しさん:2014/01/19(日) 15:36:20.26
twython 使ってる
150デフォルトの名無しさん:2014/01/19(日) 16:55:29.79
python-twitterをちゃんとドキュメントに載ってるように書いてるのにエラーが出るとかわけわからんw
151デフォルトの名無しさん:2014/01/19(日) 17:42:13.41
解決する気ないんなら自分の日記に書いてくれ
152デフォルトの名無しさん:2014/01/19(日) 19:47:59.94
PythonでCGI書いてるんだが迷宮入りしたプログラミングweb助け
http://hayabusa.2ch.net/test/read.cgi/news4vip/1390125059


Python3って文字列Unicodeだけになったんだっけか
デフォルトのエンコーディングutf-8じゃないんじゃねえの

これとか参考になんね?

http://stackoverflow.com/questions/9322410/set-encoding-in-python-3-cgi-scripts


違和感
153デフォルトの名無しさん:2014/01/19(日) 20:39:56.61
コード晒せるだけ晒せよって言わないのはなんかお約束でもあるんだろうか
154デフォルトの名無しさん:2014/01/19(日) 20:51:17.88
unicodeとutf-8は違うよ
155デフォルトの名無しさん:2014/01/19(日) 21:19:15.73
原因がはっきりしたようでめでたい
156デフォルトの名無しさん:2014/01/19(日) 21:33:38.54
馬鹿には無理
157デフォルトの名無しさん:2014/01/19(日) 22:10:15.58
2chはしょせん便所の落書き
自分の日記にも書けないようなことを書くとこだよ
158デフォルトの名無しさん:2014/01/20(月) 00:00:05.16
自分には標準ストリームとかそのあたりの理解が足りないんだけど
そのあたりの知識ってどういうところで学んでるの?
書籍とか?
159デフォルトの名無しさん:2014/01/20(月) 00:20:28.64
「ふつうのLinuxプログラミング入門」で覚えたけど、
Web上のLinuxやプログラミング言語のマニュアル読めば十分じゃないの
160デフォルトの名無しさん:2014/01/20(月) 02:13:11.86
>>158
標準入出力(stdin,stdout)等の事?プロセスの開始や環境変数の伝播等
カテゴリ的には「システム・プログラミング」

「POSIX」という共通の規格があるけど、細かい部分ではOS依存になるので、
より深い所に関心があるなら、各OS毎の情報を調べる事になります。

Linuxだとman、WindowsだったらMSDNとかになるのかな。
この辺の情報は、書籍でも大抵はC言語になると思う。
161デフォルトの名無しさん:2014/01/20(月) 17:35:18.99
あ”あ”あ”!!
Pythonの正規表現苛つく...
何なんだよ、コレ!?
ワケが分からん
162デフォルトの名無しさん:2014/01/20(月) 17:40:18.82
無理しないで分相応なツール使ってればいいのに
背伸びしても疲れるだけだぜ
163デフォルトの名無しさん:2014/01/20(月) 17:44:10.50
Pythonでテキストブラウザ作ってみようと思ったんだけど、
そもそもああいうのはHTMLを一旦読み取ってタグやらを除去してるのか?
164デフォルトの名無しさん:2014/01/20(月) 17:55:50.83
いや宇宙のどこかからデータを引っ張ってきて表示するだけだよ
165デフォルトの名無しさん:2014/01/20(月) 18:00:57.86
Pythonの正規表現は引数の順番が他の言語と違ってて時々間違えるけど
ワケ分からなくはないだろ
166デフォルトの名無しさん:2014/01/20(月) 18:15:45.70
いや、俺の持ってるPythonの本とか全然詳しく書いてないから、
後方一致だとか、大文字小文字の無視とか訳が分からんかった
PHPのpreg_matchみたいな簡単なのあればいいのに
文法が気に喰わん
re.compile()した後にsearch()してgroup()して...とか
めんどくさい
167デフォルトの名無しさん:2014/01/20(月) 18:17:25.84
>>163
パーサを作って、タグや属性等はイベント・ドリブンで処理してる。
168デフォルトの名無しさん:2014/01/20(月) 18:19:12.38
>>163
mechanizeってライブラリで簡単にできる例えば
<div>あ</div> ← こういう文字列から"あ"だけを取り出すのとか
自分で正規表現かく必要すらない
でもPythonからmechanizeを扱うには日本語資料少なすぎて難しいかもしれない
rubyからmechanizeを扱うなら資料沢山あるのだけど
169デフォルトの名無しさん:2014/01/20(月) 18:21:09.90
>>166
正規表現よく使うなら正規表現リテラルのある Ruby のほうが向いてるかも
あと Python は re.compile() するのが面倒なら re.search() とかモジュールメソッド呼んでも構わない
170デフォルトの名無しさん:2014/01/20(月) 20:05:04.04
Pythonのreモジュールでデリミタ変更したいんだけど、どうすればいい?
シングルクォート、ダブルクォート以外にしたいんだけど
例えば、
pattern = r"正規表現"
r = re.compile(pattern)
m = r.search(str)
が一般的だと思う
171デフォルトの名無しさん:2014/01/20(月) 20:27:29.51
r"..." は raw 文字列って言って文字列の一種
r"\n" は バックスラッシュと n の二文字に解釈される
正規表現のデリミタではないよ
172デフォルトの名無しさん:2014/01/20(月) 20:42:39.09
r"\""
がめんどいから
r|"|
みたいに書けないかって話だと思う
perlやrubyの悪臭がするけど
173デフォルトの名無しさん:2014/01/20(月) 20:54:00.40
三連クオートのRAW文字列使えばいいだろ pattern = r"""aaa"bbb"""
日本語ドキュメントあるんだし読めよ
174デフォルトの名無しさん:2014/01/20(月) 20:57:02.69
PHP じゃないかなあと
175デフォルトの名無しさん:2014/01/20(月) 21:52:12.29
>>172
そう、そういうこと
説明の仕方が悪かったね、ごめん
176デフォルトの名無しさん:2014/01/20(月) 23:49:20.74
その文字列に、
〇〇以外の文字列が含まれているかどうかってのはどうやって判断すればいいの?
俺が馬鹿なのか全く思いつかない
177デフォルトの名無しさん:2014/01/20(月) 23:58:23.09
〇〇の文字列を置換で除去した後に、何か残ってるか調べるのはどう
178デフォルトの名無しさん:2014/01/20(月) 23:59:47.69
頭がいいと難しく考えすぎることがある。
アホは、○○を検索して見つからなかったら含まれていないと考えるw
179デフォルトの名無しさん:2014/01/21(火) 00:31:58.54
単語単位なのか文字単位なのか、
重複する文字を許すかどうかで変わってくると思う。

"lolol".replace("lol", "") # 'ol'
re.sub(r"lol", "lolol", "") # ''
not re.match(r"^(AAA|BBB|CCC)+$", "CCCBBBAAAd") # True
180179:2014/01/21(火) 00:33:53.50
ごめん、re.subの引数の順番間違えた
re.sub(r"lol", "", "lolol") # '' でした
181デフォルトの名無しさん:2014/01/21(火) 11:16:29.47
Pythonの正規表現を本やWeb上で調べると、だいたい
e = re.compile(pattern)
r = e.search(str)
if r is None:
print("fuck you")
else:
i = 0
while i >= -:
m = e.search(str, i)
if m:
print m.group(1)
i = m.start() +1
と書いてる(後半は自分のやり方)
182デフォルトの名無しさん:2014/01/21(火) 11:20:45.13
でも、あるサイトで
r = re.search(pattern, str, flags)
と書いてたんだけど、これでいけるの?
実際実行してみて上手くいったような気がするんだけど、
compileしなくてもいいのなら、連続で正規表現適用させる場合なんか、わざわざ冗長な上の書き方しなくて済むから楽だよね?
この下のやり方で問題のある時、デメリットってあるの?
183デフォルトの名無しさん:2014/01/21(火) 11:44:47.68
>>180
>>> re.sub(r"lol", "", "lolol")
'ol'
184デフォルトの名無しさん:2014/01/21(火) 12:51:19.13
>>182
コンパイル済み正規表現オブジェクトは、Python2では100個、Python3では512個キャッシュされるので
re.search使ったとしても、毎回コンパイルされるわけではない
詳しくは /Lib/re.py のソースコード参照

ループ中で同じ正規表現を何百万回も使う場合など・・・
キャッシュから取り出す処理時間すらも削りたい状況ではcompileを使うべき

速度を気にしないなら可読性の良いre.searchでおk
ただしre.searchには、検索範囲を指定する引数はない
185デフォルトの名無しさん:2014/01/21(火) 13:45:16.38
ディクショナリの順番って何順になるの?
186デフォルトの名無しさん:2014/01/21(火) 14:04:58.84
>>185
Pythonの実装依存
順番をそろえたいなら for k in sorted(dic.keys())
187デフォルトの名無しさん:2014/01/21(火) 14:08:33.01
>>184
なるほど
教えてくれてありがと
188デフォルトの名無しさん:2014/01/21(火) 15:26:29.05
py2.7 beautifulsoupでパースできなかった場合、
lに値が入らず下記エラーになります。
if (l == None): といった風に例外処理を書く事は出来るんでしょうか?
エラーで処理を止めずに、エラーが出た事を取得したいのですが・・
分かる方いらっしゃいましたら、お願い致します! f = open("test.html") s = BeautifulSoup(f) l = s.find("a")["href"] TypeError: 'NoneType' object has no attribute '__getitem__'
189デフォルトの名無しさん:2014/01/21(火) 16:14:20.71
ごめん、また質問させて欲しいんだけど...
正規表現使用して、該当部分を表示するのではなく、
逆に削除して、その部分を抜いて表示したい場合どうすればいい?
>>181で言えば、m.start()やm.end()で該当部分が出てくるけど(例えば123-184)、
その部分を抜いて表示するというやり方しかないのかな?
190181:2014/01/21(火) 16:30:30.41
訂正しとく
i = m.start()+1じゃダメだね
i = m.end()+1じゃないと
じゃないと重複が大量に出てきてしまうし、処理速度が極めて遅くなってきそう
191デフォルトの名無しさん:2014/01/21(火) 16:44:36.99
>>189
置換したいのかな?

s = "ab2c45d67e8fg"
print(re.sub(r'\d+', '', s))
192181:2014/01/21(火) 16:49:41.71
>>191
あ、そうか
俺バカだなぁ

str = str[0:m.start()-1] + str[result.end()+1:]
とかめんどくさいことしてた
ま、これでも出来ることは出来るんだけどね
どっちが処理速度が早いかは分からんけど
なんかPython触ってから他の言語で出来ることを複雑に考えすぎてるのか、混乱してるっぽい

とりあえず教えてくれてありがと
193デフォルトの名無しさん:2014/01/21(火) 17:09:45.45
>>188
たぶんfindで見つからないときNoneが返るんでしょ?
a = s.find("a")
if a is None:
 print 'エラーです'
else:
 l = a["href"]
194デフォルトの名無しさん:2014/01/21(火) 21:06:23.68
>>193
あー思い通りにいきました。ありがとうございます。
195デフォルトの名無しさん:2014/01/22(水) 02:17:05.01
>>183 指摘thx 今度からtypoなくす為に、コピペにします

>>185
順序付辞書なら、collections モジュールに OrderedDict もあるよ。こちらは挿入順。
196デフォルトの名無しさん:2014/01/22(水) 17:49:26.29
HELPです
関数内でループが適用されません
以下のスクリプトを行うと、urlやjavascriptがそれぞれ一つずつしか抽出されません
インデントも確認してみたんですが...

うpローダーにスクリプトをあげました
http://www.dotup.org/uploda/www.dotup.org4819644.py.html

関数にせずに、それぞれ素で適用させた場合は上手くいくのですが、
そのそれぞれの処理を関数に書いて適用させた際には、結果が一つしか出てきません
スコープなのかなぁ?
Pythonは良く分かりません
197 忍法帖【Lv=3,xxxP】(2+0:5) :2014/01/22(水) 17:58:01.18
直リン貼れなかったので、ちょっと自分の忍法帖確認してみます
すみません
198デフォルトの名無しさん:2014/01/22(水) 18:28:22.22
>>196-197
再現可能なサンプルデータぐらい用意したら?
URLじゃなくてそのまま食わせられるHTMLね
あと、ソース貼るならpastebin.com、codepad.org、ideone.comとかにしてくれ
199デフォルトの名無しさん:2014/01/22(水) 18:31:28.15
>>196
チラっと見た感じだけど、正規表現パターンが原因でしょ
最初の pattern_url はいいが、残り2つは前後に .+ .* が付いてるから
1回で文字列全体にマッチして終了してしまうよ
200デフォルトの名無しさん:2014/01/22(水) 18:33:26.13
他の言語ができるならテストを書きなされ
201デフォルトの名無しさん:2014/01/22(水) 18:43:02.73
変に複雑な事してるけど、こんな感じでいいと思うけどなあ
results = []
for m in re.finditer(r'''\bhref=['"]?([^"<>\s]+)''', html, flags = re.I):
 results.append(m.group(1))
if uniq:
 results = list(set(results))
202デフォルトの名無しさん:2014/01/22(水) 20:57:54.65
>>196
tagRemoveのre.subを繰り返し呼ぶようなコードだけど、
一度で全て置換されるのでループは不要。

re.subn使えば置換個数を確認できます。
203デフォルトの名無しさん:2014/01/22(水) 21:47:35.69
>>196です
皆さん、色々とアドバイスありがとうございました
204デフォルトの名無しさん:2014/01/23(木) 00:17:18.66
直リンク禁止されてるのでscheme部を省いてリンクします
コード : pastebin.com/7YqtR23Q

空白行が除去できないのですが、これは自分の正規表現の書き方が悪いからでしょうか?
それとも、pythonのコーディングが間違っているからでしょうか?
自分の結果では最初の20行は空白行が続き、21行目に" / "と言う文字が出てきます
その後はまた暫く空白行が続きます
これらの空白行を全部取り除きたいのですが...

もしかしたらこのような面倒くさいやり方ではなく、関数などの利用で一気に除去できるかもしれませんが
検索しても見当たりませんでした

アドバイス頂けないでしょうか?
205デフォルトの名無しさん:2014/01/23(木) 00:36:54.08
Pythonの実行速度、たとえばfor文で何百万回も
ループを回すような処理が遅くて困っています。
リスト内包表記とかmap関数とかjoin関数とかで
極力高速化しているものの、Pure Pythonでは
頭打ちの状態です。
CPythonやCython、PyPyなど、実装側で高速化する
方法を検討していますが、これといった決め手に
欠けています。

主な用途はNumPyを併用した科学計算や
データの整形など、数値計算寄りです。
サーバアプリのような規模の大きいものではなく、
単一のスクリプトファイルを必要な時に叩くといった
やり方がほとんどです。
sys、os、subprocess、numpyは必須。
できればscipyやmultiprocessingも使いたいです。
Mac/Win/Linuxいずれの環境でも実行できる必要が
あります。
そして互換性や可読性の都合上、各実装に特化した
コーディングは極力避けたいです。
各実装の得手不得手など、ざっくりとした内容で
結構ですのでご意見いただけませんでしょうか?
206デフォルトの名無しさん:2014/01/23(木) 01:14:19.47
そこまでやるなら素直にRubyへ移行したほうが良いです。
そのままゴリ押ししても良いことないです。
207デフォルトの名無しさん:2014/01/23(木) 01:16:49.69
>>204
正規表現を勉強する
検索ではなく公式のチュートリアルと標準ライブラリにざっと目を通す
2 タブをやめる
208デフォルトの名無しさん:2014/01/23(木) 01:51:16.12
>>205
cで書け
209デフォルトの名無しさん:2014/01/23(木) 02:17:47.09
>>205
Cythonで十分だろう
なにが不満なんだ
210デフォルトの名無しさん:2014/01/23(木) 02:39:36.29
>>205
つanaconda accelerate
211デフォルトの名無しさん:2014/01/23(木) 03:12:36.80
>>205
PyPyは確かにCPythonより計算とか速いこともあるけど一長一短でそれだけな感が
Cythonは型指定でC/C++に迫れるけどそもそもCに変換してコンパイルしてるので
C/C++で書いたらいいじゃない感、PurePythonコーディングでなければ互換性がないのも…

numpy前提なら小手先のマルチプロセスより
pyopenclでも使ったほうが次元の違うレベルになるんじゃないかな
212デフォルトの名無しさん:2014/01/23(木) 04:28:10.51
>>204
ここで質問したのはもう終わりにするの?

Regular Expression(正規表現) Part12
http://toro.2ch.net/test/read.cgi/tech/1387257592/234
213デフォルトの名無しさん:2014/01/23(木) 06:54:13.07
>>204
空白行を取り除く

print("\n".join(x for x in html.splitlines() if x))
214デフォルトの名無しさん:2014/01/23(木) 06:56:06.28
PyPyは注意書きにあるようにPurePythonじゃないとエミュレーションで遅くなるし
俺は速度が必要な時はCython/Cだね
Cで書いてCythonでGILを開放しつつ糊付け
あとはスレッド作って回す
215デフォルトの名無しさん:2014/01/23(木) 10:39:52.60
216デフォルトの名無しさん:2014/01/23(木) 10:53:42.61
期待通りに動かないときはまず問題の切り分けをしようね。
217デフォルトの名無しさん:2014/01/23(木) 11:07:46.37
何でもかんでも正規表現でやろうとするな
最終的に何がしたいのか分からんがBeautifulSoupでやればいいんじゃね?
http://kondou.com/BS4/#get-text
218デフォルトの名無しさん:2014/01/23(木) 11:36:48.25
>>204
このプログラムはURLを抽出するだけ?

import urllib.request
from bs4 import BeautifulSoup

url = "http://hoge.com/hoge.html"
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, from_encoding='cp932')

url_list = [link.get('href') for link in soup.find_all('a')]

print(url_list)
219204:2014/01/23(木) 13:29:44.81
皆さん、アドバイスありがとうございます
今から色々と試してみますが、前もって感謝の意を述べておきます

>>212
いえ、そうではなくて、自分の書いたスクリプトが正規表現が問題ではなく、
そもそもpython自体が問題だったかもしれないのでそこを確かめたかったのです

>>213
ありがとうございます
正規表現でなく、組み込み関数を利用して出来れば遥かに良いのでそういうやり方を教えていただけるとありがたいです

今ざっとやってみたところ、最初の部分の空白行は除去されていましたが、後ろの方はまだ残っているようです
暫く試行錯誤してみます

>>217
以前PHPを使ってDOMを利用してたときも同様の経験をしたのですが、
BeautifulSoupは補完してくれる事もあるようですが完璧ではなく、
HTMLのパースエラーが出ることがあり、汎用的じゃないとの決断を下しました
なので、自分でどんな構文でも処理できるようにしようと思いまして
220デフォルトの名無しさん:2014/01/23(木) 15:20:45.41
おまえには無理
221デフォルトの名無しさん:2014/01/23(木) 16:24:38.13
>そもそもpython自体が問題だったかもしれない
すげえなコイツw
222デフォルトの名無しさん:2014/01/23(木) 16:58:41.77
>>219
> いえ、そうではなくて、自分の書いたスクリプトが正規表現が問題ではなく、
> そもそもpython自体が問題だったかもしれないのでそこを確かめたかったのです
えっ?
223デフォルトの名無しさん:2014/01/23(木) 17:12:22.97
頓珍漢な正規表現書いておきながら処理系のバグを疑うとかあまりにもひどい
224デフォルトの名無しさん:2014/01/23(木) 17:32:39.77
とはいえその心情、理解できないわけではない。
技術途上の目覚ましい、比較的初段回においてそういった考えがめぐるのは分かる。
しかしそれを公然と言い仰せるとはいやはや大物の予感。
225デフォルトの名無しさん:2014/01/23(木) 17:42:55.24
python本体のことじゃなくて、自分で書いたpythonの事だろ
226デフォルトの名無しさん:2014/01/23(木) 18:35:59.03
>自分で書いたpython
大物が続々と現れますな
227デフォルトの名無しさん:2014/01/23(木) 18:36:58.78
凄いな・・・
用意されてるpythonをインストールして使うぐらいしか出来ないわ
228デフォルトの名無しさん:2014/01/23(木) 18:50:48.58
全然面白くないぞ
229デフォルトの名無しさん:2014/01/23(木) 19:41:31.09
処理系の言語の前に会話言語
230デフォルトの名無しさん:2014/01/23(木) 20:09:32.50
何かこいつ嫌なことでもあったんだろうか?
231デフォルトの名無しさん:2014/01/23(木) 20:16:28.18
>>219
スペースやタブのみの行も取り除くなら、これでどうかな。

print("\n".join(x for x in html.splitlines() if x.strip()))

全角スペース等があれば、別途対応が必要かもしれない。x.strip(" \t ") のように

後、HTMLを正規表現で処理するのは、例外的な状況への対応で面倒が多い。
ネストした要素や行儀の悪いHTML、正しいHTMLでも、閉じタグのない要素を取り除くとか。

タグの抽出等は、
HTML Tidyのようなフィルターを通してから、HTML/XMLパーサに渡して、XPATHで扱うのが手軽。

import lxml.html
url_list = lxml.html.parse(URL).xpath(r"//a/@href")
232デフォルトの名無しさん:2014/01/23(木) 20:17:00.68
”超初心者”用のスレだから!スレだから!
233デフォルトの名無しさん:2014/01/23(木) 20:54:41.48
>>232
た、たしかに、正直すまんかった
いかなる妄言も甘んじて生暖かい目で見守らねばならん
234デフォルトの名無しさん:2014/01/23(木) 21:04:55.54
>>205
ツール選択の前に、示されてる高速化の手法に疑問があるのだけど、
組み込みのリスト使ってるのかな?

numpyの配列を扱ってるのなら、Pythonでforループや内包表記/mapで回したりせず、
速度を求めるなら、極力numpyの関数内で処理するようにコードを組み立てる事になります。
235デフォルトの名無しさん:2014/01/23(木) 21:15:15.70
皆どのテストツール使ってる?
俺unittestしか使ったこと無かったけど、noseやpy.testのようなサードパーティ製も気になってきた
unittestめんどくさいんだよな
236デフォルトの名無しさん:2014/01/23(木) 21:29:58.96
ここは紳士的な人が一人か二人いることによって救われているなw
237デフォルトの名無しさん:2014/01/23(木) 21:46:15.03
変態紳士しかいないけどな
238デフォルトの名無しさん:2014/01/24(金) 04:20:39.27
初心者ならpython選んでも仕方ない
239デフォルトの名無しさん:2014/01/24(金) 20:32:44.34
テストツールは...
240デフォルトの名無しさん:2014/01/24(金) 20:43:37.44
>>235
旧unittest もしくは、各フレームワーク標準のもの使ってる。(twisted.trial)

機能的な利点があるわけではないけど、保守的な理由で。
ファイル一個で完結する場合は assertとdoctest

乗り換えるなら py.test かな。unittest/nose どちらでも移行が簡単そうだし。
241デフォルトの名無しさん:2014/01/25(土) 13:51:51.24
PythonでPHPの@みたいにエラー制御するにはどうすればいいんでしょうか?
PHPの@を付けるだけというようなものはないのでしょうか?
242デフォルトの名無しさん:2014/01/25(土) 14:16:24.33
>>241
PHPの@演算子ってエラー制御というよりエラー抑制をしたいの?
Pythonだとtry使ってexceptでpassするしか無いんじゃないかな
243デフォルトの名無しさん:2014/01/25(土) 16:22:58.20
言葉がまずかった...です、エラー抑制です
なるほど、passしかないんですね
244デフォルトの名無しさん:2014/01/25(土) 16:37:02.44
他にもあるよ
245デフォルトの名無しさん:2014/01/25(土) 17:22:28.87
オブジェクト指向を最初に学ぶのに最適な言語はPythonだと友人に言われたのですが、実際どうなんでしょう?
プログラミングの経験はJavaで電卓作った程度です
246デフォルトの名無しさん:2014/01/25(土) 17:57:25.02
>>243
そういえばエラー抑制しか考えずにレスしちゃったけど
もし事前に検証可能ならPythonの論理演算子は短絡で最後に評価した値を返すから
result = validate and expression
のように簡潔に書け、高コストな例外発生をさせずに済む
あるいはdictのgetのようなそもそも例外を出さない方法があればそうするとか

or die的なものならexcept節でsys.exitやquit/exitを呼ぶとか
やっぱり例外処理になるのかな(quit/exitは標準入力も閉じる

>>245
入門言語という点なら悪くない選択だと思います…が
Pythonのオブジェクト指向は純粋な実装ではないので
Javaを触ったことがあるのならC#という選択も良いんじゃないかな?
247デフォルトの名無しさん:2014/01/25(土) 17:58:46.82
興味本位ならsmalltalkかな
248デフォルトの名無しさん:2014/01/25(土) 18:26:13.28
てかJavaやればいいだろうがよォ
249デフォルトの名無しさん:2014/01/25(土) 18:35:06.55
>>245
Pythonを今後使っていきたいという明確な目的があるなら
Pythonでオブジェクト指向プログラミングを勉強するのは
悪くないだろう。
ただ、Javaの経験があるならJavaでもいいんじゃないかと
いうのが大多数の意見だと思う。
ここはPythonスレだし、Pythonistaが増えることは
大歓迎だけどね。
250デフォルトの名無しさん:2014/01/25(土) 18:54:23.60
>>243
with文 で >>128 のような contextmanager を使う。

例外のコストは、C++やJava等とは事情が違い、
事前にチェックするよりも、例外捕まえる方が効率よいケースがあったりするよ。
実際に例外が投げられるのは高価だけど、try/except ブロック自体はそれ程高くない。
251デフォルトの名無しさん:2014/01/25(土) 20:04:18.61
pythonで多重継承って
あんまりみたことがないけど
一般的に流行ってないのか
python的に分かりにくいのかどっちなんだろ
252デフォルトの名無しさん:2014/01/25(土) 21:09:32.46
一般的に流行ってないと思う
253デフォルトの名無しさん:2014/01/25(土) 21:12:40.82
ある関数を30分毎に永遠に実行するみたいな処理はどういう風に書けばいいんでしょうか?
メモリリークするからタスクスケジューラ等を使用するのがいいのでしょうか?
理想はコンパイルしたexeファイルを起動したまま間隔をあけて繰り返す、です。
初心者のためアドバイス頂けると嬉しいです!
254デフォルトの名無しさん:2014/01/25(土) 21:22:28.98
それで目的が達成できるならタスクスケジューラでいいと思うがな
コードで書いても大した量じゃない
http://ideone.com/nhhhNN

ところで、上のコードでは
while thread.is_alive(): time.sleep(1)
で待機してる
これをThread.joinでやろうとするとKeyboardInterruptが来ない
何でだよ
255デフォルトの名無しさん:2014/01/25(土) 21:28:49.28
スレッドの中のtime.sleep(60*30)を
for n in range(60*30) time.sleep(1)
にすれば割り込みを拾えるようになると思います
なんかそういう仕様らしいです
256デフォルトの名無しさん:2014/01/25(土) 22:01:22.36
>>254
調べてもどういう事をやってるか全然わからないですが(time.sleep(1)とか)
subprocess.call('nslookup google.com')の部分に処理をいれたらいいんですね。ありがとうございます!
257デフォルトの名無しさん:2014/01/25(土) 23:11:58.89
>>251
標準ライブラリとか例外クラスで普通につかわれてる
258デフォルトの名無しさん:2014/01/26(日) 01:32:30.27
os.walk()を使って、あるディレクトリ(target/)以下に存在する「ファイル・ディレクトリ」の辞書を含んだリストを得たいです。
バージョンはPython2.7です。よろしくお願いします。┏○ ペコリ

・ディレクトリツリー
target/
 folder1/
  folder11/
   file111
  file11
  file12
 folder2/
  file21
  file22
 file1
 file2

・得たいリスト
[ {’name’ : ’folder1’, ‘child’ : f1}, {’name’ : ’folder2, ‘child’ : f2}, {’name’ : ’file1’}, {’name’ : ’file2’} ]

f1 = [ {’name’ : ’folder11’, ‘child’ : f11}, {’name’ : ’file11’}, {’name’ : ’file12’} ]
f11 = [ {’name’ : ’folder1’, ‘child’ : f1}, {’name’ : ’file111’} ]
f2 = [ {’name’ : ’file21’}, {’name’ : ’file22’} ]
※ 見やすくするために、f1, f11, f2 を変数で分離していますが、実際は辞書の中で展開されています。
259デフォルトの名無しさん:2014/01/26(日) 01:50:35.70
>>205
亀だけどscipyにもweaveというインラインC/C++があるみたい

でもわざわざライブラリ使ったり組んだりするまでもない規模なら
ctypesが関数プロトタイプにアドレス指定できるということは
標準ライブラリだけでマシンコード実行できるじゃんと思い至ったんだ
ttp://ideone.com/l6QivM
Hand Assembly Data Execution in Script略してHADES

デスマーチを彷彿とさせるね!というくだらない事を言いたかっただけですはい
ぐぐってみたら案の定同じような変態が居て笑った
260デフォルトの名無しさん:2014/01/26(日) 09:52:30.99
>>258

叩き台書いてみた。
(※ あまりテストしてません。os.walkの走査する順序に依存してるかもしれない)

ideone.com/PHnCTP

こういった再帰で書くような処理をループで処理する時は、
データ構造のスタックの利用を考えるとうまくいくよ。
261デフォルトの名無しさん:2014/01/26(日) 10:22:29.66
>>258
import os
def f258(path):
  root, dirs, files = os.walk(path).next()
  a = [{'name':name, 'child':f258(os.path.join(path,name))} for name in dirs]
  b = [{'name':name} for name in files]
  return a+b
def f258view(tree,level=0, space=" "):
  for x in tree:
    name = x['name']
    if x.has_key('child'): name += "/"
    print space*level + name
    if x.has_key('child'):f258view(x['child'], level+1)

tree = f258("target")
f258view(tree)
262デフォルトの名無しさん:2014/01/27(月) 00:28:25.53
>>258

辞書でなくてもいいなら、
3.4 で標準ライブラリに入る pathlib が、インストールすれば 2.7 でも使える。

def view_path_tree(root, level=1, indent=" "*4, _format="{}{}".format):
  print(_format(indent*(level-1), root.name+"/"))
  for path in root.iterdir():
    if path.is_dir():
      view_path_tree(path, level+1, indent, _format)
    else:
      print(_format(indent*level, path.name))

from pathlib import Path
view_path_tree(Path("."))
263デフォルトの名無しさん:2014/01/27(月) 17:41:36.88
簡易expandコマンドを作りたいのですが、
'taro\ttanaka'
この文字列中のTabをリスト内包表記でSpaceに変換できないでしょうか
264デフォルトの名無しさん:2014/01/27(月) 17:54:57.95
[' ' if i == '\t' else i for i in s]
解決しました。ありがとうございました
265デフォルトの名無しさん:2014/01/27(月) 18:00:51.85
266デフォルトの名無しさん:2014/01/27(月) 18:27:18.19
Tkinterってどう発音するの?
267デフォルトの名無しさん:2014/01/27(月) 18:31:22.82
L = [1, 2, 3]

def odd(n):
  if n % 2:
    return n

[i for i in L if odd(i)]

Pythonで高階関数を実装すると、こんな感じ?
268デフォルトの名無しさん:2014/01/27(月) 18:44:27.28
ティキンター
269デフォルトの名無しさん:2014/01/27(月) 18:46:01.76
てぃーけいいんたーって読んでる
高階関数って fold とか map とかあのへんじゃないの
270デフォルトの名無しさん:2014/01/27(月) 19:33:50.41
質問させていただきます。もしスレ違いでしたらごめんなさい
PythonでOrangeをインポートして分析を行いたいのです。
データのtxtファイルやcsvファイルを読み込んでいる例を見たのですが
txtファイルがどのように書かれているかご存知の方教えてください。

txtファイルがどのように書かれているかが分かれば分析できそうなのですが…
271デフォルトの名無しさん:2014/01/27(月) 19:51:30.67
272デフォルトの名無しさん:2014/01/27(月) 20:38:02.08
>>270
そのテキストファイルを開いてみたら書き方がわかるんじゃ・・・
273デフォルトの名無しさん:2014/01/28(火) 00:26:41.01
>>270です。

>>271>>272
レスありがとうございます。Orangeはこれです!
このサイトの中にファイルの例が見当たらなくて困っています。
274デフォルトの名無しさん:2014/01/28(火) 00:47:25.96
>>273
>>271 のページに lenses.tab って CSV (TSV) ファイルへのリンクがあるけどそれとは違うの?
275デフォルトの名無しさん:2014/01/28(火) 00:56:14.97
>>273
ファイルへのリンク張ってると思うけど
Tutorial等のデータは、Orangeインストールしたら Orange/datasets に入ってるよ

Orange Canvasからファイルを読み込む場合は、
ファイル選択の所で "Browse documentation data sets..." 選択すると一覧を開いてくれる。

orange.biolab.si/start-using/ ここから始めよう
276デフォルトの名無しさん:2014/01/28(火) 01:26:42.21
>>274
ありがとうございます。
拡張子がtabの場合ってcsvとして扱える、ということでいいですか?
初歩的な質問ですみません。

>>275
Orangeのdatasets確認しました。ありがとうございます!
すみません、「orange.biolab.si/start-using/」はどういうことですか?初歩的な質問ばっかりですみません。
277「ガスライティング 集団ストーカー カルト」で検索を!:2014/01/28(火) 01:31:40.21
★マインドコントロールの手法★

・沢山の人が偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法


↑マスコミや、カルトのネット工作員がやっていること

TVなどが、偏った思想や考え方に染まっているフリや常識が通じないフリをする人間をよく出演させるのは、
カルトよりキチガイに見える人たちを作ることで批判の矛先をカルトから逸らすことが目的。

リアルでもネットでも、偽装左翼は自分たちの主張に理がないことをわかっているのでまともに議論をしようとしないのが特徴。
,..,
278デフォルトの名無しさん:2014/01/28(火) 01:34:14.91
>>276
Orange Canvas -> Help -> Welcome -> Get Start で開くページ
URLです。リンク貼れなかったので頭の h t t p : / / 省いてます
ブラウザによっては、そのまま貼り付けてもok
279デフォルトの名無しさん:2014/01/28(火) 03:26:13.91
>>278
ご丁寧にありがとうございます!がんばってみますー
280258:2014/01/28(火) 17:53:45.29
>>260, 261
お二方、ありがとうございます。
ループで書く方法と、再帰的に書く方法、どちらも大変参考になりました。
おかげさまで、ファイル・ディレクトリ操作をする自作Scriptの作成が捗りそうです。

>>262
こんなライブラリがあるとは。
3.xでますます便利になりそうですね。
281デフォルトの名無しさん:2014/01/28(火) 20:20:59.23
皆、クラスを書いたファイル名どういう風に付けてる?
PHPや他の言語の頃はclass.hoge.phpとか、class.hoge.jsとか書いてたんだけど、
Pythonでは不正というような警告がEclipseに出るんだけど

何かPythonのディレクトリ構造内のファイル名の付け方とか、指南の書かれているサイトとかない?
282デフォルトの名無しさん:2014/01/28(火) 20:24:35.56
公式チュートリアル嫁
283デフォルトの名無しさん:2014/01/28(火) 20:48:12.49
頑固者が作ったJavaじゃあるまいし
284デフォルトの名無しさん:2014/01/28(火) 21:03:46.54
ドットは名前空間の階層を表すのに使われているから、ファイル名に含めたらマズイだろ
標準ライブラリのフォルダを覘けば参考になるよ
285デフォルトの名無しさん:2014/01/28(火) 21:06:54.01
>>281
"PEP8" の Package and Module Names
286デフォルトの名無しさん:2014/01/28(火) 22:08:53.61
変数がboolean型かどうか調べる方法教えて
a = Trueとした場合、どういう風に書けばいいのか分かりません
287デフォルトの名無しさん:2014/01/28(火) 22:12:55.48
>>286

isinstance(a, bool)
288デフォルトの名無しさん:2014/01/28(火) 22:22:20.45
>>287
あれ?
自分それでやったんだけどエラーでたんだよね
でも今もう一度変数名変えたら出来た

答えてくれてありがとう
289デフォルトの名無しさん:2014/01/28(火) 23:04:22.36
pythonのクラス内でprivateメソッドを定義する場合ってどうするんですか?
と言うか、存在しないんですか?

ttp://woodyring.blog.so-net.ne.jp/2013-05-25-1
とか見ると、アクセスできてしまうとあるのですが
290デフォルトの名無しさん:2014/01/28(火) 23:27:40.10
>>276 追記です
>拡張子がtabの場合ってcsvとして扱える、ということでいいですか?

Orange.data.Tableで読み込む場合は、拡張子を見て書式を判別してる部分があるので、
例えば、拡張子 .tab なカンマ区切りのデータは NG です。拡張子 .csv でカンマ区切りなら OK
291デフォルトの名無しさん:2014/01/28(火) 23:28:09.32
質問させてください
PHPにはmethod_exists()のように、指定する関数が存在するかを確認できる関数があります
Pythonにて同じような挙動をさせるにはどのようにすればいいのでしょうか?
ググってみたのですが、分かりませんでした
292290 続き:2014/01/28(火) 23:31:15.36
但し、エラーなく読み込めていても、正しく読み込めているとは限りません。
ファイル先頭にカラム名や型・フラグ等の情報がないと、
数値を期待したのにデータが文字列、等という事が起こりえます。

ファイルの書式は、チュートリアルの一番最初 The Data や
リファレンスの Orange.data.formats に詳しく書かれてます。
293デフォルトの名無しさん:2014/01/28(火) 23:36:36.06
vars()
294デフォルトの名無しさん:2014/01/28(火) 23:42:56.01
>>289
存在しないと思っていい。

アンダースコア2個のは、
Pythonでは、"private" って用語は使わず、"name mangling" って呼ばれます。

>>291
obj.method を調べるなら getattr(obj, "method")
295294:2014/01/28(火) 23:45:45.47
method_exists 相当なら hasattr の方が適切だった。
296デフォルトの名無しさん:2014/01/28(火) 23:52:11.41
hasattr して callable でチェック
297デフォルトの名無しさん:2014/01/29(水) 00:06:18.04
config = {"a":"あ", "b":"い"}
a = hoge()
a.init(config)
#以下はクラス
class hoge(o):
def __init__(self):
self.a = "foo"
self.b = "bar"
def init(self, config={}):
self._clear()
for key, item in config.iteritems():
try:
if self.key: <-ココでエラーが出ます

自分はクラス内のメンバ変数が存在するか(例えばself.a)を調べるために、self.keyとしたのですが、
これではself.aを調べるのではなく、文字通りself.keyを調べに行ってしまいエラーが出ます
どのようにすれば最後のif文にてself.aとself.bの存在を調べられますでしょうか?
298デフォルトの名無しさん:2014/01/29(水) 00:12:25.44
>>295-296
ありがとうございます
つまり、
hasattr(Hide, 'method') and callable(getattr(Hide, 'method'))
クラス内であれば
hasattr(self, 'method') and callable(getattr(self, 'method'))
という事でしょうか?
299デフォルトの名無しさん:2014/01/29(水) 00:28:39.61
>>289
Pythonに限らず、他の言語でも
リフレクションが使えれば、privateなメンバへアクセス可能だったりする。

重要なのは、アクセスの完璧な隠蔽ではなく、クラス作成者の意図されない使われ方、
不用意に子クラスや外部から参照されるのを防ぐ、コンパイル時にこれを検出する事。

一応、非公開を意図するなら、名前の頭に アンダースコア 一個付ける慣習があって、
外部から非公開属性の参照は、pylint 等で検査すると警告出してくれます。
300デフォルトの名無しさん:2014/01/29(水) 00:36:21.52
>>297
self.aとself.bの存在を調るなら
if hasattr(self, 'a') and hasattr(self, 'b'):

configに"a"と"b"のキーが存在するか調べるなら
if "a" in config and "b" in config:
301デフォルトの名無しさん:2014/01/29(水) 00:40:53.96
>>298
hasattrは、実際にはあまり使わなくて、
getattr の第三引数使ったり、実際にアクセスしてみて例外捕まえたりします。

この場合は、これでいいかな
callable(getattr(obj, "method", None))

クラスの場合は、 __getattr__ (PHPで言う __get()) の判定は、出来ないかもしれない。
302デフォルトの名無しさん:2014/01/29(水) 00:42:41.31
>>300
ありがとうございます
ちょうど>>298を見てそのようにし、出来ました

しかし、>>297の関数init()内にて
self.key = item
を行わなければいけない部分があります
self.keyのkeyをPythonに"変数"と認識させるにはどのように記述すれば宜しいのでしょうか?
調べても出てこないので参っています
303デフォルトの名無しさん:2014/01/29(水) 00:56:35.14
>>302
"変数" の辞書を操作する方法もあるけど、(vars, locals, globals)
状況的に欲してるのは、オブジェクトの属性に設定する方法かな?

setattr(self, key, item)
304デフォルトの名無しさん:2014/01/29(水) 00:59:58.59
>>302
インスタンスの属性を動的に設定したいということで良いかな?
代入する属性を動的にしたいということで良いかな?
基本はsetattr()だが、インスタンスには__dict__という属性を保持する辞書がある
代入元が辞書ならself.__dict__.update()に突っ込んだり
既存の属性が必要なければself.__dict__にコピーを代入するという手もある
ちなみにメソッド定義には**kwdsなどと**を付けることで
キーワード引数全てを辞書で取得するという文法もあったりする
305デフォルトの名無しさん:2014/01/29(水) 01:16:50.27
>>> config = {"a": 10}
>>> class A: pass
...

# 属性の場合
>>> obj = A()
>>> vars(obj).update(config)
>>> obj.a
10

# 変数の場合
>>> vars().update(config)
>>> a
10
306デフォルトの名無しさん:2014/01/29(水) 01:31:57.94
コードの静的解析でチェック出来なくなるので、あまりお勧めしない方法だけど、

注意点

__dict__は、__slots__を持つクラスのインスタンスにはない。
vars(obj) は obj.__dict__ を返すので同様。

変数を動的に作る場合は、予めスコープ内で変数を宣言しておかないと、
存在しない変数の参照は、グローバルを参照するようになるので、
グローバルに同名の変数がなければ、エラーになります。

vars() は、locals() ローカルの変数の辞書を返します。
307デフォルトの名無しさん:2014/01/29(水) 01:56:25.61
>>303-306
本当にありがとうございます
今家に帰って布団に入った所なので、また明日試してみます
丁寧に教えていただきましてありがとうございました
308デフォルトの名無しさん:2014/01/29(水) 16:16:23.98
>>297内に、
if method in dir(self.__class__): # 関数が存在するか
self.method(item)
という部分があるのですが、これまた変数methodに動的に値が割り当てられないため、
「self.methodというメソッドは存在しません」のようなエラーが出てしまいます
@classmethodを使い、
def m(self, method, **arg):
self.method(arg)
などとし、動的にmethod()を行おうとしたのですが、意味が無いと思いました
何度も申し訳ないのですが、どのようにコードを書けば宜しいでしょうか?

関数のコードです
http://codepad.org/6YDM6gHZ
309デフォルトの名無しさん:2014/01/29(水) 16:44:42.45
self.__class__.__dict__[method](self, item)
310デフォルトの名無しさん:2014/01/29(水) 16:48:00.93
getattr(self.__class__, method)(self, item)
この方がいいな
311デフォルトの名無しさん:2014/01/29(水) 17:13:10.01
>>309-310
出来ました
教えて頂きまして本当にありがとうございました
312デフォルトの名無しさん:2014/01/29(水) 19:39:42.89
getattr(self, method)(item) でいいはず
313デフォルトの名無しさん:2014/01/29(水) 20:23:48.82
インスタンスメソッドじゃなくてクラスメソッドの話じゃないのか
314デフォルトの名無しさん:2014/01/29(水) 21:03:05.22
オブジェクト指向めんどくせえ
シンプルを旨とするPythonの精神に合わない
315デフォルトの名無しさん:2014/01/29(水) 22:38:40.85
PHPではクソ簡単だけどな
上に書いてあるような質問も、$this->$keyで済む
誰も迷うことないんじゃないかな
JSはPythonより分かりにくい
と言うか、JSは欠陥言語だろ
今では有志たちが頑張ってくれた遺産があるから何とかなっているが

ま、Pythonは簡単に...の思想のおかげで逆にやりたいことにたどり着くのに時間かかる時がある
316デフォルトの名無しさん:2014/01/29(水) 22:46:29.26
>>313

309. 310 は、第一引数にインスタンスを渡してる所から、インスタンス・メソッドとしての呼び出し。
クラス・メソッドは、通常、第一引数にクラスのオブジェクトを渡します。

インスタンス経由でもクラスの属性にアクセス出来る為、
クラス・メソッドにインスタンスを与えても、大抵の場合は動作はしますが、
クラスとインスタンスの区別がついてないので、修正すべき状況です。

312 は、インスタンスからメソッドを得ていて、
対象のメソッドが、クラスメソッド、インスタンスメソッド どちらでも呼べます。
317デフォルトの名無しさん:2014/01/29(水) 22:53:45.56
簡素に書きたければ
__getitem__ = object.__getattribute__
でもしたら良い、インスタンスメソッド以外はメタクラスで。
318デフォルトの名無しさん:2014/01/29(水) 23:21:05.98
>クラスとインスタンスの区別がついてないので、修正すべき状況です。
コレはどこの事を言ってるの?
>>310のこと?
319デフォルトの名無しさん:2014/01/30(木) 00:32:00.34
>>318
そこは未束縛の関数を想定してたけど、(Class.method.im_func)
310,311 の場合では杞憂のようでした。

310,311 で、対象がもしクラスメ・ソッドだった場合は、
それぞれ、呼び出し不可・引数が異なる事になりますね。
320デフォルトの名無しさん:2014/01/30(木) 10:24:10.72
pyptとかpygtkで実装されたソフトはたまにあるけど、tkinterはなにかある?
321デフォルトの名無しさん:2014/01/30(木) 10:26:01.47
特にない
322デフォルトの名無しさん:2014/01/30(木) 10:42:53.54
turtleって実践で何か役に立つことあるんですか?
323デフォルトの名無しさん:2014/01/30(木) 11:10:16.27
>>322
子供の教育
324デフォルトの名無しさん:2014/01/30(木) 11:34:02.99
入門レベルですらないのですが・・・。
OSはWindows7でpython2.7.6をインストールして
ブログなどを読みながら導入を行っているのですが
pathを通す、という所でつまずいています。

環境変数→"path"を編集して、pythonのディレクトリパスを追加し、
コマンドラインで">>> python"と打つと、
pathが正しく設定されていれば、ヴァージョン情報が表示される、
という認識で合ってるのでしょうか。

確かに編集できていると思うのですが、
コマンドで">>> python"と打っても、
NameError: name `python` is not defined
と返されてしまいます。

何か勘違いをしているのでしょうか。
325デフォルトの名無しさん:2014/01/30(木) 11:41:09.54
>>324
それ、できてます。
326デフォルトの名無しさん:2014/01/30(木) 11:43:07.32
>>320
IDLE
327デフォルトの名無しさん:2014/01/30(木) 12:02:36.77
>>326
やっぱりそんなもんですか
軽くguiプログラミングを学ぶのにはいいと思うんだけど
328デフォルトの名無しさん:2014/01/30(木) 12:05:09.04
>>325
Windowsのコマンドプロンプトで"python"と入力すると、
確かにヴァージョン情報などが表示され、起動できていました。

pythonのコマンドラインと勘違いしていました。精進します。
ありがとうございます。
329デフォルトの名無しさん:2014/01/30(木) 17:15:42.35
projectの下に、libs、classes、testsと3つのディレクトリがあります
projectを除くそれぞれのディレクトリ内には空白の__init__.pyを置いています

今、tests内のfoo.pyというファイル内に
from libs.bar import bar
と書いてlibs内のbar.pyファイルを読み込もうとした際、
ImportError: No module named libs.bar
と出てしまいます

しかし、classes内のhoge.pyファイルから同じように
from libs.bar import bar
と書くとちゃんと読み込んでくれます

どのようにすれば、tests内のfoo.pyがlibs.barを読み込んでくれるのでしょうか?
パーミッションはいずれも664となっています
Python2.6です
330デフォルトの名無しさん:2014/01/30(木) 19:41:54.68
sys.path.append('.')
331デフォルトの名無しさん:2014/01/30(木) 20:35:47.75
>>329
ライブラリで副作用のあるコードを含みたくないなら、環境変数 PYTHONPATH

だけど、パッケージにしてるなら classes と同じで読み込めるはず。

各スクリプトを実行してる場所と実行方法は?
./project から python ./tests/foo.py と実行してる?
332デフォルトの名無しさん:2014/01/30(木) 23:13:31.89
>>330
ありがとうございます
一応、動作は確認できました
ただし、何故libs内、classes内は
from libs.bar import bar
のような方法で読み込めるのに、tests内はエラーが出るのか謎です


>>331
はい
$ cd $HOME/project
$ python ./tests/foo.py
のような感じでもエラーが出てしまいます
./tests/内のファイルから、./libs/内や./classes/内のファイル、モジュールが読み込めません
./libs/内から./classes/内、またその逆は可能なのですが
333デフォルトの名無しさん:2014/01/31(金) 01:08:03.95
>>332
目的がテストの実行という事であれば、setup.py から実行する方法や
(2.7のunittest2以降?) python -m unittest tests で実行する方法もあります、

ImportErrorは、
とりあえず思いつくデバッグ方法。 python -i 付で実行してみて、実行後
>>> import sys
>>> for path in sys.path: print(path)
...
読み込めた時・読み込めなかった時の sys.path を比べてみる。
./classes/foo.py と ./tests/foo.py は、同じ内容をコピーして試してみる。
334デフォルトの名無しさん:2014/01/31(金) 01:19:18.58
参考までに、プロジェクトのルートから

$ PYTHONPATH=. python ./tests/foo.py
$ python -mtests.foo

で正常に import 出来るのを確認。 2.6/2.7/3.3/3.4 @ linux

$ python ./tests/foo.py

では ImportError。
./classes/foo.py でも同様の結果になりました。
335デフォルトの名無しさん:2014/01/31(金) 02:56:36.71
先輩、モジュール読み込む度に

僕の名前は...マー坊

って入力させるのやめて下さいッ!
336デフォルトの名無しさん:2014/01/31(金) 08:18:52.75
__init__.pyが無いという
337デフォルトの名無しさん:2014/01/31(金) 11:31:59.75
は?
何のこと?
>>329のこと?
それなら__init__.pyはあるって書いてあるように見えるけど?
338デフォルトの名無しさん:2014/01/31(金) 11:50:55.28
そもそもモジュールの独立性を高めるための分割化なのに
モジュール同士の依存関係強めてどうすんのよ
設計を見直した方が良いレベル
339デフォルトの名無しさん:2014/01/31(金) 12:36:28.36
同じことやったことあるから、わからんでもない
他のモジュールでも使う→別モジュールとして独立させる
他のモジュールから使うことは無い→インポート先のモジュールに組み込む
340デフォルトの名無しさん:2014/01/31(金) 18:16:43.92
インスタンスメソッド、クラスメソッド、スタティックメソッドの違いが分からないんだけど
インスタンスメソッドは簡単
foo = Foo()でインスタンスを作成して、Foo.method()で実行

で、残りの静的メソッド2つ
スタティックメソッドは他の言語にもあるように、インスタンスを作成せずに呼び出すんでしょ?
例えばスタティックメソッドであればFoo.method()、PHPの書き方が視覚的に分かりやすいのでPHPであればFOO::method()
でもマニュアルにはFoo().method()でもFoo.method()でもいいと書いてる...(何で?)

じゃぁクラスメソッドって何だってことになるんだけど、第一引数にclsを与えてるってことは、継承時に関係してくるのかなと
selfはそのクラス自体(Foo内であればFoo)
clsは読み込まれた時のクラス(Bar子クラスからFoo親クラスのクラスメソッドを呼び出した場合はcls=Bar)
ってことになるのかな?
混乱してきた.....

どういう時に使い分けるのがいいの?
インスタンスメソッドはガッツリとそのクラスを使いたい時、
スタティックメソッドはどうせそのメソッドだけしか使うこともなく、クラスの呼び出しすらオーバーヘッドを気にしたい時、
クラスメソッドは親クラスのメンバ変数の値を変更したくない時とか?
メリットなど教えてくれない?
341デフォルトの名無しさん:2014/01/31(金) 18:18:20.94
ごめん、3行目はFoo.method()じゃなくてfoo.method()の書き間違い
342デフォルトの名無しさん:2014/01/31(金) 19:18:16.31
>>340
コール方法というよりはインスタンスメソッドはインスタンス変数が必要な処理

クラスメソッドはそのインスタンスを生成するとかクラス変数にアクセスしたい時とかなので概ねその理解でいいと思う
Pythonはclassスコープにアクセスしづらいので…def時デフォルト引数に渡しておくという手もあるけど
スタティックメソッドはあまり使われないかも

Pythonのオブジェクトはこんな実装になってます
ttp://docs.python.jp/3.3/howto/descriptor.html
343デフォルトの名無しさん:2014/01/31(金) 20:20:40.57
noseってManual読むとあまり詳しく書かれていないけど、
https://nose.readthedocs.org/en/latest/index.html
つまり、Unittest継承してるから、Unititestと同じように書けばいいですよ、
そのあとコマンドラインで使う場合は我々の方が色々なオプション提供してるので便利ですよ、
ってこと?
assertXXメソッドのことですら触れられてないけど
344デフォルトの名無しさん:2014/02/01(土) 00:29:56.70
class Point
def plus(addend)
return self.class.new(5, 5) <-ココ
end
Rubyで上のようなコードがありますが、Pythonではどのように書けばいいでしょうか?
self.__class__(5, 5)のように考えたのですが、ダメでした
345デフォルトの名無しさん:2014/02/01(土) 00:33:49.86
あっ、上を何気なく眺めていたら、setattr()を見つけました
これで代用できるんじゃないかと試してみます
346デフォルトの名無しさん:2014/02/01(土) 00:36:39.95
連投すみません
setAttr()ではダメでした
クラス内部変数などを変更するには良さそうでしたが、
インスタンス時に渡すという用途ではダメっぽいです
347デフォルトの名無しさん:2014/02/01(土) 00:54:25.67
その説明だけでは何やってダメだったのか分からない
://codepad.org/ にでもソースの一部を貼りなよ
348デフォルトの名無しさん:2014/02/01(土) 00:58:11.87
>>340
他の言語では、(Pythonの)クラス・メソッド相当のものを宣言するのに static キーワードを使うので、
"static" を他の言語のものに当てはめて考えていると混乱するかもしれない。

Pythonのスタティック・メソッドは、クラスに所属してるだけの普通の関数です。

使い分けの基準は、インスタンス変数/クラス変数 へのアクセスの有無にのみ着目して考えてみるといいよ。
349デフォルトの名無しさん:2014/02/01(土) 02:31:10.68
>>343
nose では、TestCaseを継承するようなコードは書かず、pythonの assert文を使うのだけど、
一応、assertX 系のメソッドは nose.tools 下にあるよ。

関数のように扱う事になるので、pep8に従い assert_regexp_matches みたいに名前は変わってます。
実際に unittest.TestCaseからメソッドを動的に取り込んでるので、命名規則以外は全く同じ。

代替の方法があるものもあります e.g) assert_raises -> nose.tools.raisesデコレータ
350デフォルトの名無しさん:2014/02/01(土) 03:08:51.39
>>344
メソッド内でインスタンスを作成自体は、self.__class__(5, 5) で合ってる。

値を返すのに return を忘れたとか、ESPしてみるけど、どうだろう。

多分やりたい事は、こんな感じの immutable な Point型
ideone.com/4atjqo
351デフォルトの名無しさん:2014/02/01(土) 05:35:16.74
352デフォルトの名無しさん:2014/02/01(土) 06:00:42.69
ずっと TestCase から派生してやってたけど
yield を使った複数テストは
objectから派生させないと動かない
ことにはめられたわ...

setUp が効かなくなるし
デコレータ嫌いだしはめられたわ...
353デフォルトの名無しさん:2014/02/01(土) 08:44:41.12
>>351
見てみたけど、マルチじゃないじゃないか
質問内容が違う
こっちはクラスの話、むこうは関数の事聞いてる
354デフォルトの名無しさん:2014/02/01(土) 12:20:50.58
なにその微妙に変えてますよアピールw
355デフォルトの名無しさん:2014/02/01(土) 13:31:01.78
.NET FrameworkのSystem.Drawing.Drawing2D.Matrixに相当するクラスってありますか?
(3x3のアフィン変換行列をカプセル化したもの)
356355:2014/02/01(土) 15:29:49.46
自己レス
matplotlib.transforms.Affine2D で良さそう
357デフォルトの名無しさん:2014/02/01(土) 17:13:21.08
>>335
ワロタw
358デフォルトの名無しさん:2014/02/01(土) 18:59:39.40
class ABC(object):
def __init__(self, x):
self.x = x
def back(self, x):
return self.x

abc = ABC(50)
if abc == ABC(50) # ABC(50) == ABC(50)でも同じ結果
print"same"
else:
print"diff"

で"diff"となるけど、Pythonでは新規作成オブジェクト(インスタンス)は別物だとみなされるんだね?
359デフォルトの名無しさん:2014/02/01(土) 19:11:27.10
__eq__オーバーライドしてなければね
360デフォルトの名無しさん:2014/02/01(土) 19:15:25.63
__eq__や__cmp__をオーバーライドしないならベースクラスの実装に依る
それがイミュータブルならアイデンティティさえ処理系に依る
361デフォルトの名無しさん:2014/02/01(土) 19:20:31.12
def __eq__(self, other):
 return isinstance(other, type(self)) and self.x == other.x
362デフォルトの名無しさん:2014/02/01(土) 19:22:37.33
既存エクセル(チャート付き)を編集できるモジュールってあります?
363デフォルトの名無しさん:2014/02/01(土) 19:51:43.99
>>362
win32com
364デフォルトの名無しさん:2014/02/01(土) 20:21:25.43
>>360-361
そうなの
機器に依存するのかぁ
教えてくれてありがと
365デフォルトの名無しさん:2014/02/01(土) 21:07:27.54
x,yのループの定番の書き方は?
for x, y in ((x, y) for x in range(10) for y in range(10)):
pass
これだと1行ですむけど、forが2回も出てきて美しくない気がする
366デフォルトの名無しさん:2014/02/01(土) 21:10:56.50
>>> list(itertools.product(range(5), repeat=2))
367デフォルトの名無しさん:2014/02/01(土) 21:21:01.52
itertools使ったことないな…
368デフォルトの名無しさん:2014/02/01(土) 21:29:03.15
itertools面白いよね
こんなの何に使うんだって思うものでも
サンプルを見るとヘーっていうのがある
combinationsとか、dropwhileとかは
実務に使わせてもらっている
369デフォルトの名無しさん:2014/02/01(土) 22:02:14.52
for (x, y) in zip( range(10), range(10) ):
 pass
370デフォルトの名無しさん:2014/02/01(土) 22:19:28.95
>>369
それはこれと同じ
for x in range(10):
 y = x
 pass
371デフォルトの名無しさん:2014/02/02(日) 01:10:42.91
子クラス内で親クラスの呼び出し方は、
class b(a):
def __init__(self):
papa = super(b, self)
papa.method("mama") # mamaに浮気がバレた
でいいんですよね?
でも、例えば
from a import a
などしてれば、
class b(a): #または(object)
def __init__(self):
papa = a()
でも大丈夫だと思います
その場合はa()とsuper(b, self)は同じものなのでしょうか?
372デフォルトの名無しさん:2014/02/02(日) 05:29:20.88
>>371
状況が良く解らないけど、何か変な事してるような気がする

親クラスのメソッド呼び出しも、self.method()

子クラスでオーバーライドした場合に、親クラスのメソッドを呼び出すには
(クラス大文字で書くけど B > A > object と継承してるとして)

super(B, self).method() もしくは、親を明示する場合は A.method(self)


> a()とsuper(b, self)は同じものなのでしょうか?
superが返すのは、親クラスのメソッドを順に呼び出すための
プロキシ・オブジェクトでインスタンスとは異なります。
373デフォルトの名無しさん:2014/02/02(日) 05:34:57.15
教えてください。↓からまとめサイトのURLとジャンルだけうまく抜き出す方法ないでしょうか。
Beautifulsoupでトライしてるのですが、Beautifulsoupが高機能すぎて全然使いこなせてないです。。。
http://dic.nicovideo.jp/a/2ch髢「騾」縺セ縺ィ繧√し繧、繝医?ョ荳隕ァ
374デフォルトの名無しさん:2014/02/02(日) 05:37:01.60
すみません。URL が文字化けしました。
"http://dic.nicovideo.jp/a/2ch関連まとめサイトの一覧" です。
375デフォルトの名無しさん:2014/02/02(日) 08:55:14.73
馬鹿には無理
376デフォルトの名無しさん:2014/02/02(日) 11:38:12.92
URL書いとけば誰かが作ってくれる
377デフォルトの名無しさん:2014/02/02(日) 11:41:48.69
おお、アンテナサイト作ろうとしてたからこれは便利だわ
ちょっとスクレイプってくる
378デフォルトの名無しさん:2014/02/02(日) 13:11:19.11
URL 書いてるのでずが、日本語URLだからリンクが途切れちゃうんですよね。
http://dic.nicovideo.jp/a/2ch関連まとめサイトの一覧
です。

>>376
コードを書いて欲しいのではなく、ここにいるような有識者がどんな方法で
アプローチするのか知りたかったというのが正直なところです。

最悪1文字づつ処理すれば、まぁなんとかなるので。

>>377
回答ありがとうございます。
やっぱスクレイプでググって考えろってことだと思うのですが、
スクレイプでググった結果、Beautifulsoup にたどり着いて、
今まさにそこでつまづいてます。。。。
379デフォルトの名無しさん:2014/02/02(日) 13:21:14.73
>>378
HTML理解してれば難しいことは何もないと思うんだけどw
データが入ってるタグを抽出して、そこから分割してとれば簡単なような

まぁ、一回だけのデータ抽出なら手動の方が早いかとw
380デフォルトの名無しさん:2014/02/02(日) 13:37:32.88
>>378
BeautifulSoup 自体は 要素のリスト・属性・テキストをそれぞれ得る方法3点だけ抑えれば ok

面倒なのは HTML の解析で、空欄やリンクのない項目、htmlタグが混ざった(?)ジャンル名等の例外があるので、
このような適切に意味付けされてない文書では、個別に対処するような泥臭いコードを書くことになります。
# そして、更新があった際も、コードも変更に追従しないといけなくなる可能性が高い。。
381デフォルトの名無しさん:2014/02/02(日) 13:38:44.31
382デフォルトの名無しさん:2014/02/02(日) 13:57:19.32
皆はさ、TDD,BDD使って開発してるの?
Unittest,pyspecとか使って
383デフォルトの名無しさん:2014/02/02(日) 14:18:21.98
書いてみた。データのチェックはしてません。叩き台程度にどぉぞ。

* table/tr/td の順に走査
* table は style が border で始まっていなければスキップ
* tr は td の要素数が 2 でなければスキップ
  * title ... td[0] を / で split ※ 空の項もある
 * url ... 末尾の a 要素の href ※ リンクがない項もある
 * genre ... td[1] を / で split

後は、文字コード変換の際に面倒な文字があったり、
ジャンル名に変なタグ紛れてたりする等、細かい点の修正が必要。

codepad.org/1tATXFdI
384373:2014/02/02(日) 14:22:03.60
>>373
その形式で貼ったら文字化けしたんですよね。使ってる専ブラの問題かもしれません。
あの後、もう少し調べてみたら、↓で取れそうな気がしてきました。がんばってみます。
100 のとこは 適当に値を入れてあるだけです。。。

url = 'http://dic.nicovideo.jp/a/2ch髢「騾」縺セ縺ィ繧√し繧、繝医?ョ荳隕ァ'
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())
soup.findAll('tr')[100].findAll('a')[1] # サイトのURL
soup.findAll('tr')[100].findAll('a')[2] # ジャンル
385373:2014/02/02(日) 14:25:49.08
384のミスです。やっぱり化けた
386デフォルトの名無しさん:2014/02/02(日) 14:27:29.47
BeautifulSoupみたいな完璧じゃない物使うからだ
387373:2014/02/02(日) 14:37:25.94
>>386 なんかおすすめあったら教えてください。。。お願いします。
388デフォルトの名無しさん:2014/02/02(日) 15:26:56.53
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read().encode('utf-8'))
389デフォルトの名無しさん:2014/02/02(日) 16:01:31.18
>>387
今携帯からだから該当ページのHTMLが読めない
390373:2014/02/02(日) 16:02:18.95
>>388
これは文字コードしっかり処理しろってことですかね?
391373:2014/02/02(日) 16:35:57.84
>>389
ありがとうございます。今 >>383 さんがくれたやつを使って考えています。
また、分かんなかったら書き込みますので、その時はどうぞお願いします。
392373:2014/02/02(日) 16:37:35.63
>>383

すみません。codepad のリンク全然気づいてませんでした。
本当にありがとうございます。
393デフォルトの名無しさん:2014/02/02(日) 16:37:48.72
クラウドソーシングで3,400円で頼めばすぐに作ってくれそうな人がいそうだなw
394373:2014/02/02(日) 16:41:57.84
>>393
仕事じゃなくて、最近プログラミングに興味をもってやり始めただけなので。
395デフォルトの名無しさん:2014/02/02(日) 16:46:18.65
BeautifulSoupが暗黙的にstrをunicodeに変換して、
しかも変換時のエラーを無視するから>>384になる

ちょっとよくない設計だよね
テキストが肝心要なんだから変換に失敗したらエラーでユーザーに気づかせるべきだろうに
396デフォルトの名無しさん:2014/02/02(日) 17:09:51.64
お前らPyPy使えよ
397デフォルトの名無しさん:2014/02/02(日) 17:12:18.86
3.3に対応したら使うから教えてくれよ
ぜんぜん期待してないけどね
398373:2014/02/02(日) 17:16:14.13
>>395
すみません。そうではないです。
単に2chへの書き込みでURLが文字化け
してるだけです。

実際に処理では文字化けとかはしてないです。
399デフォルトの名無しさん:2014/02/02(日) 17:17:11.53
PyPy早いぞ
400デフォルトの名無しさん:2014/02/02(日) 17:18:59.39
Python3使ってる奴いるんだな
401デフォルトの名無しさん:2014/02/02(日) 18:33:23.34
list・set・dict・tupleみたいな抽象的なコンテナ型を使うのは、中身を気にせず操作できるからでしょ
文字列も、ShiftJIS・EUC-JP・中国語・アラビア語・・・言語やエンコードを気にせず操作したい
そんな時にこそ、抽象的な文字列として機能するユニコード文字列の出番なのです
テキスト重視ならユニコード文字列にすべきで、データ重視ならバイト列にすればいい
Python2のstrは、どっちつかずで中途半端な存在だ
402373:2014/02/02(日) 18:34:47.23
結果報告ですが、>>383 の書いてくれた
コードで解決しました。本当にありがとう
ございました。
403デフォルトの名無しさん:2014/02/02(日) 19:14:01.50
最初から他人に作らせる気だったくせに
404373:2014/02/02(日) 19:21:54.59
>>401 そう思われても仕方がないですが、そのつもりはなかったです。
というか >>395 さんの作ってくれたやつをいじろうと思ったんですが、
自分の他の処理の方がイケてなさすぎたので、そっちを改修しています。

>>395 さんのコードを見て思ったのですが、↓の処理をあの短時間で思いついてすごいな思っています。
自分が欲しいブロックじゃないとこに style が入ってて、そこを避ければいいなんて、気づきませんでした。
----
if not table.get("style", "").startswith("border"):
----
405373:2014/02/02(日) 19:27:27.58
アンカミスしました。>>383 です。
406デフォルトの名無しさん:2014/02/02(日) 19:36:24.72
407デフォルトの名無しさん:2014/02/02(日) 20:08:40.01
いちいち一言多いな
408デフォルトの名無しさん:2014/02/02(日) 21:03:29.87
>>403のことか....
409デフォルトの名無しさん:2014/02/02(日) 21:06:19.86
メール本文に含まれてる URL のホスト部分を逆引きして,
特定の IP アドレスにマッチしてたらなにがしかの動作を
するとかメール捨てるとかの, フィルター的なものって
ありませんか?
410デフォルトの名無しさん:2014/02/02(日) 21:15:16.58
ありますね
411デフォルトの名無しさん:2014/02/02(日) 21:16:20.81
--a.py--
class a(object):
def method(self):
return True
にてUnittestを適用する際、多言語(例えばRuby)でassert(a.method())に対応する書き方を教えて下さい

--TestA.py--
self.assertTrue(a.method())でも、
self.assertEqual(a.method(), True)でも、
TypeError: "bool" object is not callable.
と出てしまいます
ちなみにバージョンの関係上assertIs()は使えません
412デフォルトの名無しさん:2014/02/02(日) 21:45:52.91
self.assertTrue(a.method)
413デフォルトの名無しさん:2014/02/02(日) 21:51:33.39
ありがと
何で()抜いたのなら動くのかは分からないけれど、Fake Itの時などの利用時に使えるので助かりました
414デフォルトの名無しさん:2014/02/02(日) 23:11:51.31
ArgumentException/ErrorってPythonにはないけど、
正数の引数を想定していて、負数が来た時などにraiseした場合、
どんなException/Errorを入れれば良いんですかね?
415デフォルトの名無しさん:2014/02/02(日) 23:16:01.80
ValueError
416デフォルトの名無しさん:2014/02/03(月) 00:01:39.03
なるほど、ありがとうございます
417デフォルトの名無しさん:2014/02/03(月) 00:12:22.17
UnittestのassertRaises()の使い方に困っています
自分のPythonのバージョンが2.7ではないため、コンテキストマネージャとして利用できません
with self.assertRaises(myException) as ex:
class.method("number", -1)

self.assertEqual("negative quantity", ex.message)
のようにしたいのです
self.assertRaises(myException, class.method("number", -1))では、
File "/usr/lib64/python2.6/unittest.py", line 335, in failUnlessRaises
callableObj(*args, **kwargs)
TypeError: 'NoneType' object is not callable
とエラーが出てしまいます

また、self.assertRaises(myException, class.method)では、
TypeError: method() takes exactly 3 arguments (1 given)と出てしまいます

例外を発生させてエラーメッセージを取得し、assertEqual()にてエラーメッセージやエラーコードを比較するというやり方はどのようにすればいいのでしょうか?

また、assertRaises()の第3引数はいったい何のためにあるのでしょうか?
無くても問題ないのでしょうが、マニュアルにも詳しく書かれていないので、
仕様がよく分かりません
418デフォルトの名無しさん:2014/02/03(月) 00:47:00.28
Pythonでarr = new Array(2)のようにするにはどうすればいい?
419デフォルトの名無しさん:2014/02/03(月) 00:52:10.29
>>417

2.7の unittest2 (2.7では標準の unittest) はバックポートされてるので
インストールさえすれば 2.6 でも利用可能です。

第3引数以降は、関数形式で利用する際の第2引数のcallableに渡す引数

self.assertRaises(RuntimeError, lambda: func(1, 2, n=3))
self.assertRaises(RuntimeError, func, 1, 2, n=3) と同じ。


> 例外を発生させてエラーメッセージを取得し、
> assertEqual()にてエラーメッセージやエラーコードを比較

恐らく try/except 内で assert するという事だろうけど、
テスト内にその様なロジックを書くのは悪手で、
期待する例外が来なければ、未到達のコードになってしまう可能性が出てきます。

assertRaisesRegexp を使うとエラーメッセージのテストが出来ます。@ unittest2

それから、assertTrue は廃止予定のエイリアスなので気をつけて。
420デフォルトの名無しさん:2014/02/03(月) 01:08:10.28
>>418
リストでいいのかな?型付Arrayだったら array モジュールがあるけど。

immmurable な値で初期化するなら

arr = [None] * 2
421デフォルトの名無しさん:2014/02/03(月) 01:17:54.71
>>419
色々とお答えいただきましてありがとうございました

unittest2をpipからインストールしたら、unittest2をimportしても、PyDevにて使えなくなりアンインストールした事があります
やろうとしている事が出来る関数などがpython2.7から追加とかあり、色々と悩んでおりました
422デフォルトの名無しさん:2014/02/03(月) 02:43:56.69
>>421
> assertTrue は廃止予定のエイリアスなので気をつけて。
ごめん、これだけ勘違い。

>>411は、assertTrue が () なしの関数を受け取るわけではなく
.method が呼び出し可能な関数/メソッドではなく、既に bool 値になってるんじゃないかな?
# プロパティとして宣言していたりすると () なしで呼び出される。
423デフォルトの名無しさん:2014/02/03(月) 06:01:19.06
>>411
そのクラスの実装 (クラス名が小文字の a) で a.method() だとしたら
表記はクラス・メソッドとしての呼び出しになるんじゃない?

assertTrue(a.method) -> メソッドがbool値として評価されて True になってる可能性もあるので、
テストでは、まず失敗するテストを書いて、期待通りに失敗するのを確認しよう。
424デフォルトの名無しさん:2014/02/03(月) 13:00:36.09
>>421
PyDevだったら py.test って選択肢も在

py.test.raises を関数として呼び出した時に、
例外情報を返してくれるので、ここから例外オブジェクトにアクセス可能。

nose もサポートされてるけど、nose.tools.raises はデコレータ用で例外検出のみ。
nose.tools.assert_xxx は unittest 依存。
425デフォルトの名無しさん:2014/02/03(月) 22:36:32.82
>>422-424
ありがとうございます
非常に参考になりました
426デフォルトの名無しさん:2014/02/03(月) 23:58:10.80
みんなWindowsで普段Python使って処理したりしてる?
427デフォルトの名無しさん:2014/02/04(火) 00:08:24.94
してる
428デフォルトの名無しさん:2014/02/04(火) 00:24:34.57
今回の仕事場じゃpython使って問題ないから凄い楽しい
429デフォルトの名無しさん:2014/02/04(火) 00:52:16.72
Windowsで開発は全くしないな
俺にはデメリットの方が多いと思ってるから
完全Linux派だな
430デフォルトの名無しさん:2014/02/04(火) 01:51:56.79
python2と3の混在とかなるとめっちゃ面倒だからなWindowsは。
431デフォルトの名無しさん:2014/02/04(火) 02:18:29.96
馬鹿には無理
432デフォルトの名無しさん:2014/02/04(火) 02:34:55.10
windows のみ py ってコマンドが追加されて、起動スクリプトのshe-bang に

#!/usr/bin/env python3.3

とシェル・スクリプトの様に、version指定しておけば、
そのversionの python で起動してくれるようになってる。(PEP 397)
433デフォルトの名無しさん:2014/02/04(火) 06:45:24.15
WinでもgVim使ってるからPython使ってるといえば使ってる
434デフォルトの名無しさん:2014/02/04(火) 14:29:48.80
PHPでは慣習的にindex.phpがメイン、最初に呼び出されるファイルになるけど、
Pythonの場合って何になる?
main.pyとか?
でもmercurial見てると無いから、どれが最初のファイルなのかなと
435デフォルトの名無しさん:2014/02/04(火) 15:15:56.96
最初に呼ばれたファイルが実行されます
436デフォルトの名無しさん:2014/02/04(火) 15:28:42.76
いつもはPyDevでプロジェクト作成して、ディレクトリやファイルを手動で作成してたんですが、
新規 -> PyDevモジュール -> パッケージと名前を入力してファイルを作ったら、
import MySQLdb
がPyDev上で赤いバッテンが付きUnresolved import MySQLdbとなったり、
except MySQLdb.Errorがundfined variableになります
ただし、実行してみるとデータベース接続は出来ているようです
これ何とかならないでしょうか?
sys.pathもしてみましたが、パスは通ってるみたいです
PyDevのモジュール用の設定がおかしいのかもしれません
Eclipseスレの質問かもしれませんが
437デフォルトの名無しさん:2014/02/04(火) 18:16:17.51
eggって何ですか?
例えばsu -> pip install abcをした場合、スーパーユーザーでは
$ python
>>> import abc
なんかでは通っても、一般ユーザーでは通らない場合があります
自分はこのeggファイルのパーミッションが問題なのかなと思うのですが

$ ll ./site-packages
drwx--x--x root root pyabclib-xx.egg-info
drwx--x--x root root abclib
となっています
xで実行が認められてるんで大丈夫じゃないかなと思うんですが
438デフォルトの名無しさん:2014/02/04(火) 18:51:14.79
egg開いてみ

あとモジュールにxつけても直接実行することが想定されたモジュール以外ほぼ意味ない
439デフォルトの名無しさん:2014/02/04(火) 19:03:28.83
BeautifulSoupについて教えてください
html = """<div id ="hoge">
<div id="foo"><p>埼玉</p></div>
<p>広島</p>
<p>青森</p>
</div>"""
とあった場合、
BeautifulSoup(html).find(id='hoge').p.stringでは埼玉しか取れません
find(id='hoge').findAll('p').stringではErrorです
埼玉、広島、青森を取る方法、また、もし可能であれば埼玉を除いた、広島、青森だけを取得する方法がありましたら教えていただきたいのですが
440デフォルトの名無しさん:2014/02/04(火) 19:09:10.03
>>439
hoge使っといて他人に教えろとか馬鹿なの?
早く回線切れば?
441デフォルトの名無しさん:2014/02/04(火) 19:10:32.15
そんなことよりまずfindAllが何を返してるかでも確認しとけ
442デフォルトの名無しさん:2014/02/04(火) 19:27:48.17
(^p^)
443デフォルトの名無しさん:2014/02/04(火) 19:55:48.61
ここらへんかもしれないね
http://www.crummy.com/software/BeautifulSoup/bs4/doc/#method-names

うちのばあい
>>> soup.findAll("p")
[<p>埼玉</p>, <p>広島</p>, <p>青森</p>]
>>> soup.div.findAll("p", recursive=False) # ださい
[<p>広島</p>, <p>青森</p>]
444デフォルトの名無しさん:2014/02/04(火) 21:10:52.86
>>434
慣習は知らないけど、.zip アーカイブを直接実行する仕組みでは__main__.py が呼ばれる というのはある。
通常の起動するスクリプトはパッケージ製作者が setup.py に記述するので、そこから辿れます。
後、.eggで実行可能なスクリプトやプラグインだったらegg-infoのentry_points.txtに書かれてる。

>>436 パスの確認はどうやってる? importのチェックは静的解析みたいなので、
もし実行時に sys.path 設定してたら、そのような症状になるかもしれない(推測)。PyDev側で設定が必要。
445デフォルトの名無しさん:2014/02/04(火) 21:58:21.51
>>437
これじゃね?
setuptools - Python: Permission issue when installing an egg - Stack Overflow
http://stackoverflow.com/questions/4125237/python-permission-issue-when-installing-an-egg
446デフォルトの名無しさん:2014/02/04(火) 22:25:50.12
>>443って頭悪そうw
447デフォルトの名無しさん:2014/02/04(火) 23:11:11.45
文字コードの判定をする関数やモジュールで、今まで使っててこれはお勧め、とかいうのない?
サイトの紹介でもいいんだけど
Webで調べるといくつか出てくるけど、どれが本当に汎用性があるのか分からない
自分で関数紹介していながら、ちゃんと動作するか分からないとか、python-chardet使うのがいいとかあるけど
文字コードって他言語でも昔から悩まされてる
448デフォルトの名無しさん:2014/02/04(火) 23:23:54.49
ここは敢えて
強いて言えば明示的に指定するのがお勧めだ
と身も蓋もない発言を
449デフォルトの名無しさん:2014/02/05(水) 03:29:44.79
日本語の扱いで戸惑ったらこちらをどうぞ(バッドノウハウ集で笑える)
ttp://speirs.blog17.fc2.com/blog-entry-4.html
ttp://atomic.jpn.ph/prog/etc/encode.html
ttp://d.hatena.ne.jp/kakurasan/20100330/p1

ttp://pc11.2ch.net/test/read.cgi/tech/1217836194/339
339 :デフォルトの名無しさん:2008/08/23(土) 08:36:00
PythonのUnicodeEncodeErrorを知る
ttp://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

よくまとまってた。あとで読む
450デフォルトの名無しさん:2014/02/05(水) 04:05:51.01
バッドノウハウ集なのか?
グッドノウハウ集を紹介してやらんと
451デフォルトの名無しさん:2014/02/05(水) 04:18:16.18
グッドノウハウは無いよ
Pythonは糞
452デフォルトの名無しさん:2014/02/05(水) 04:58:57.80
ウハウハωに見えた
453デフォルトの名無しさん:2014/02/05(水) 06:42:58.31
nkfちゃんにお願いしてる。
454デフォルトの名無しさん:2014/02/05(水) 07:02:50.62
データの文字コードってあらかじめ決まっているもので
後から判定するものじゃないよな?
おかしなことに労力を割くなよ
455デフォルトの名無しさん:2014/02/05(水) 07:34:53.82
Matzもそう言ってたぬ
456デフォルトの名無しさん:2014/02/05(水) 21:42:28.48
http://pastebin.com/KvGc8ZMm
元のURI: http://www.atmarkit.co.jp/fdotnet/dotnettips/585regexreplace/regexreplace.html

上のようなHTMLがあった場合に、BeautifulSoupにて本文のみを抜き出すのはどのようにすればよろしいのでしょうか?
a = self.soup.find(text=re.compile("contents"))にて唯一分かりやすい目印のコメント部は取得できます
しかし、本文が、<p>の下にあったり、<td>の下にあったりめちゃくちゃです
a.nextSiblingsにてなんとかなるかなと思ったのですが、エラーが出ました
もしそれが出来れば、b = a.nextSibrings.findAll('p') <-findAll(['p', 'td'])のように2つ条件を入れられるのか分かりませんが...for c in b:c.textでいけるのではないかと思いました

ちょっと分かりにくい文章ですが、
1. このように、あるタグ内の処理ではなく、近くのタグ内の処理をする方法
2. find()などで複数の条件を指定する方法
3. find('div')で<div><p>こんにちは</p></div>の<p>を飛び越えてテキスト部分を取得する方法
を教えていただけないでしょうか?
3.はsoup.find('div').textで"こんにちは"だけ取得できたので複数のネストを越えて大丈夫だと思うのですが、
2.はhtml ="<div><p>こんにちは</p></div><b>こんばんは</b>"
for line in soup.findAll(['div', 'b']): print line.text
で"こんにちは"しか取得できませんでした
1.はダメでした
457デフォルトの名無しさん:2014/02/05(水) 21:44:58.44
お前が一番駄目だよ
相手した奴も昨日みたいに無視するんだろ
死ぬまで一人で作業やってろ
458デフォルトの名無しさん:2014/02/05(水) 21:48:55.77
馬鹿には無理
459デフォルトの名無しさん:2014/02/05(水) 21:55:40.81
>>456=>>219なの?
>>217でやれよ
460デフォルトの名無しさん:2014/02/05(水) 21:58:08.53
BeautifulSoupってxpath使えないから嫌いーw
461デフォルトの名無しさん:2014/02/05(水) 22:10:05.74
確かに自分がダメです
色々試してみるんですが、中々上手くいきませんでした
462デフォルトの名無しさん:2014/02/05(水) 22:59:02.48
で、作れと
463デフォルトの名無しさん:2014/02/05(水) 23:49:01.87
お前達ってさ、どういう用途でPython使ってるの?
ソフトウェア開発、サーバー管理に便利なスクリプト、Webのサーバサイドとしてなどあるけど
464デフォルトの名無しさん:2014/02/06(木) 00:11:49.21
データ解析ソフトに投げるための下処理
465デフォルトの名無しさん:2014/02/06(木) 01:52:02.18
cStringってたまに見かけるけど使ったこと無い
一般的な文字列くらいなら使うこと無いんじゃないかと思うんだけど
実際、ある程度長い文字列使って単純な方法でイテレータで回してみたら、呼ばない方が自分の場合早かったんだけど
使うことってある?
466デフォルトの名無しさん:2014/02/06(木) 07:23:21.08
VB6のコードを別の言語に変換して運用したいと思っているんだけど、
http://vb2py.sourceforge.net/index.html
のVisual Basic to Python Converterを使って変換して、
Pythonで維持していくのはどうなんでしょうか?
だれかこのVisual Basic to Python Converterを使ったことある人いますか?
467デフォルトの名無しさん:2014/02/06(木) 08:28:20.51
位置から書き直した方が良い
468デフォルトの名無しさん:2014/02/06(木) 10:18:10.62
>>465 StringIO と解釈するけど

用途は、ファイル・オブジェクトを要求する関数のテストに使ったり、
sys.stdout = StringIO() して、出力をキャプチャとか。

今(2.7以降)だと io.StringIO (for unicode) io.BytesIO (for bytes) があるので、
旧 cStringIO/StringIO は、もう使わないかな。


>>463
楽譜解析とDAWのスクリプト
469デフォルトの名無しさん:2014/02/06(木) 12:39:23.88
音楽関係に使ってる人もいるんだな
そういうの聞いたこともなかったから興味あるわ
面白い
470デフォルトの名無しさん:2014/02/06(木) 14:09:02.86
python使えるdawってあるの?
471デフォルトの名無しさん:2014/02/06(木) 17:29:17.29
DTMとか3DCGをやるやつは
Pythonを普通に書くイメージだけど
472デフォルトの名無しさん:2014/02/06(木) 17:37:06.25
それらのアプリケーションへ組みこまれたスクリプト言語がPythonだったって
言う結果論だろうけどな。
473デフォルトの名無しさん:2014/02/06(木) 18:06:26.53
ゴミはそんなことで優越感を持ってるのか
474デフォルトの名無しさん:2014/02/06(木) 18:20:18.34
CGはblenderとかmayaとかよく聞くね
DAWはパッと思い浮かばないな。何だろう
475デフォルトの名無しさん:2014/02/06(木) 19:19:51.06
ableton liveとReaperとかだって。
https://wiki.python.org/moin/PythonInMusic
476デフォルトの名無しさん:2014/02/07(金) 02:00:24.41
PyPy大好き
477デフォルトの名無しさん:2014/02/08(土) 08:02:36.76
FizzBuzz
478デフォルトの名無しさん:2014/02/09(日) 00:20:32.35
インデントの追加、削除がめんどくさいんだけど、皆どうやって対処してる?
例えば、スクリプト書いてて、「しまった、try-exceptにするべきだった」となったら、一気にインデント変更しなきゃいけんくなる
479デフォルトの名無しさん:2014/02/09(日) 00:50:23.78
それPython関係なくてエディタの便利機能ない?って質問でしょ
まあ適当にやってるよVimなら矩形選択とか
一行ずつインデントするようなことはしてない
480デフォルトの名無しさん:2014/02/09(日) 01:25:42.58
Vim使ってるの?
なるほど

自分はPyDevなんだけど、他の言語と違って綺麗にフォーマットしてくれないし、
インデントが重要な意味を持つから
一気にインデント調整出来たらいいんだけど...
481デフォルトの名無しさん:2014/02/09(日) 01:39:10.98
vim ならある程度までは visual mode で \= で行ける.ある程度までだけど
482デフォルトの名無しさん:2014/02/09(日) 01:43:38.66
インデントに大きな意味を持たせたせいで、無駄にエディタに負担を強いてるよなPythonは。
制御文が入れ子になってるところとかに新たにインデントが必要なコードを追加しようとすると、ものすごく神経を使う。
{} とかでくくる代わりに制御文のケツにコロン必須&ブロックはインデント必須で得られるメリットとデメリット、どっちが大きいのか。
483デフォルトの名無しさん:2014/02/09(日) 01:50:45.84
if文とかclass文とかで長くなればなるほどインデント調整型のPythonは厳しくなってくる
インデント数スペース2つにしてる自分は特に
80文字で改行が身体に染み付いている自分は、インデントが空文字4文字や8文字では厳しい
484デフォルトの名無しさん:2014/02/09(日) 02:02:10.24
別にインデントに意味がない言語でも、ちゃんと見やすいようにネスト変えたら
整形するでしょ。
面倒だからやらない、みたいなズボラを許さないのが逆におまえら向きなんだと
思うよ。

あとインデントを変えるのがめんどくさいとか、最初からロジックや作り方が悪い
わけだから、言語への不平より、そっちを直すのが大切。
485デフォルトの名無しさん:2014/02/09(日) 02:21:23.65
Eclipseならショートカットで一気にフォーマットしてくれるがな...
Pythonはインデントが意味があるからフォーマットしてくれない
Eclipseがインデントの意味を理解出来ないから
486デフォルトの名無しさん:2014/02/09(日) 02:30:42.56
>>484
それを強制されるかされないかで状況は大きく異なる。
そしてPythonはそれを強制する。

> あとインデントを変えるのがめんどくさいとか、最初からロジックや作り方が悪い
> わけだから、言語への不平より、そっちを直すのが大切。

そんなコーダーのコーディングスタイルに敏感に影響されるのがPython。
487デフォルトの名無しさん:2014/02/09(日) 02:59:03.04
pydevならCtrl+1でtry: exceptで囲んでインデントできたけど。
488デフォルトの名無しさん:2014/02/09(日) 04:34:44.74
やっぱpyscripterよねー
489デフォルトの名無しさん:2014/02/09(日) 05:21:03.73
俺Windows使わんから...
490デフォルトの名無しさん:2014/02/09(日) 08:36:41.65
このスレ482みたいなのがよく湧いてくるけど
スレタイにふさわしい内容だと思ってんのか?
やるならアンチ専用Pythonスレでも立てて
そっちでやれよ。もしくはどっかでツイっとれ。
491デフォルトの名無しさん:2014/02/09(日) 11:36:34.20
いつもvimだからインデントがめんどくさいと思ったことないけど
普通のWindows的なエディターだとたしかに面倒かもな
492デフォルトの名無しさん:2014/02/09(日) 11:43:23.39
eclipseでプログラミングしてる人を見るとアチャーって感じてしまう
493デフォルトの名無しさん:2014/02/09(日) 11:52:47.21
>>478
Visual Studio で書いてるから、複数行選択して Tab とか Shift+Tab でインデント上げ下げしてる。
地味に便利だわ。
494デフォルトの名無しさん:2014/02/09(日) 11:54:22.14
Vim便利よねー
自分でTABキーを押すことなんて滅多にないもの
Python始めるならまずVimを覚えなさいってくらいのもの
495デフォルトの名無しさん:2014/02/09(日) 12:05:04.57
さすがにブロックインデントくらいはできるらしいよVS君
http://pydev.org/manual_adv_features.html
496デフォルトの名無しさん:2014/02/09(日) 12:40:51.74
>>495
で、それがどうかしたのか?
497デフォルトの名無しさん:2014/02/09(日) 12:51:34.65
お前が何を思ってブロックインデントを持ち出したのかは知らんよ?
死ぬまでインデント上げ下げしててくれ
498デフォルトの名無しさん:2014/02/09(日) 12:56:04.87
オートフォーマットの話だと理解できなかったのね・・・。

「死ぬまでインデント上げ下げしてろ」はいい表現だなw
今後Pythonistaを煽る時に使おう。
499デフォルトの名無しさん:2014/02/09(日) 13:07:32.55
>>497
アンカーすら追えないアホだったのか... (w
500デフォルトの名無しさん:2014/02/09(日) 13:20:18.53
この流れで質問するのもなんだけど...
lxmlってlxml.etree.fromstring()とlxml.html.fromstring()使う方法があるけど
何が違うの?
英文とかでも見てみたけど良く分からなかった
etreeの場合はxmlもhtmlも扱えるけど、htmlに特化したlxml.htmlの方がhtmlの場合はいいという感じなのかな?
501デフォルトの名無しさん:2014/02/09(日) 13:54:37.08
>>500
文書を読み込む時のデフォルトのパーサが違うのと、
HTMLに特化した機能が幾つか追加されてます。iterlinksやcssselector等。

> etreeの場合はxmlもhtmlも扱えるけど

XMLの場合は、書式がきちんとしてないとパース出来ないので、
XHTMLだったら扱えるけど、HTMLはwell-formedな場合でなければ普通は扱えません。
looseなHTMLを読み込む場合は lxml.html を使います。
502デフォルトの名無しさん:2014/02/09(日) 13:55:55.29
>>501
教えてくれてありがとう
503デフォルトの名無しさん:2014/02/09(日) 15:38:18.37
あるサイトのページから「http://・・・」のURLだけを取得してファイルに書き込むスクリプトを書きたいんですけど、
全部で1000くらいあるんですが、膨大なせいか100くらいしか取得してくれません。全部取得するには
どうしたらいいですか?
504デフォルトの名無しさん:2014/02/09(日) 15:41:08.71
>>503
お前そろそろ死のうか?
505デフォルトの名無しさん:2014/02/09(日) 16:10:34.79
>>503
まずあるサイトにアクセスしてhtmlをそのまま保存しよう
そしたらそれを読み込んで正規表現で抽出していけばいい
506デフォルトの名無しさん:2014/02/09(日) 17:08:55.65
そもそも膨大なせいって意味分からんけどね
どうせチャンクきちんと処理してないんじゃないの?
HTTPの解説ならしてやらんぞ
507デフォルトの名無しさん:2014/02/09(日) 17:16:58.86
parse(urlopen(url).read())

よくありがちなコード。
かつreadは応答を全て返すと保証していない点をガン無視した書き方。
508デフォルトの名無しさん:2014/02/09(日) 17:43:46.92
スクロール時に動的にリンクを作ってる可能性もあるし、

どんなHTMLをどう処理しようとしてるのか解らないと、推測でしか答えようがない。
509デフォルトの名無しさん:2014/02/09(日) 18:14:42.21
>>503
> どうしたらいいですか?

ソース貼れよ
510デフォルトの名無しさん:2014/02/09(日) 18:21:13.63
いつもの日曜日君だろ?
511デフォルトの名無しさん:2014/02/09(日) 18:45:36.23
こいつリアクションしないから嫌い
512デフォルトの名無しさん:2014/02/09(日) 18:45:49.46
100個とったら勝手に破棄するプログラムかっこいい
513デフォルトの名無しさん:2014/02/09(日) 18:47:34.58
毎回構ってる奴も楽しいのか?
それとも1週間ごとにこのスレの人間全員入れ替わってるわけ?
514デフォルトの名無しさん:2014/02/09(日) 19:56:27.07
日曜日君は労働階級なので、平日は趣味ができないのです。
つまり、我々の仲間。
仲良くしたってください。

!!!
ここム板だった!
貴族の皆さん、お騒がせしました。
ペコリソコ
515デフォルトの名無しさん:2014/02/09(日) 21:18:55.27
こいつのは質問というより、ただの作ってクレクレ君だしな
516デフォルトの名無しさん:2014/02/09(日) 21:31:45.32
労働者階級だけど23時〜3時は趣味してるよ
時間がない、は甘え
517デフォルトの名無しさん:2014/02/09(日) 21:42:01.13
どう見ても貴族です。
労働者を馬鹿にしないでください。
労働階級でも貴族くらい見ればわかります!
518デフォルトの名無しさん:2014/02/09(日) 22:13:20.22
労働者として馬鹿にされてるんじゃない
人間として(ry
519デフォルトの名無しさん:2014/02/10(月) 03:01:02.53
>>490
論破できなくてアンチスレに追いやろうとしてる時点で負けですよ?
520デフォルトの名無しさん:2014/02/10(月) 03:51:41.86
おまいらオススメの、または気に入っているモジュールは?

俺は逆にオススメしないのを言うけど、Ahocorasic
これCore Dumpのエラーが出て使えない
521デフォルトの名無しさん:2014/02/10(月) 03:52:42.09
osかな
522デフォルトの名無しさん:2014/02/10(月) 07:32:52.94
ronpythonかな
自動で相手を論破するすごいやつだよ
523デフォルトの名無しさん:2014/02/10(月) 14:19:13.38
論敗損
524デフォルトの名無しさん:2014/02/10(月) 14:34:02.72
栄和放銃牌損
525デフォルトの名無しさん:2014/02/10(月) 17:10:36.31
別に気に入ってないけどrequestsとlxmlがないとマジで死んじゃう
526デフォルトの名無しさん:2014/02/10(月) 18:11:37.82
NumPyとmultiprocessingが無いと死んじゃう
527デフォルトの名無しさん:2014/02/10(月) 18:43:58.17
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwww
528デフォルトの名無しさん:2014/02/10(月) 20:30:45.79
音楽関係の人は?
君はどんなモジュール使ってるの?
529デフォルトの名無しさん:2014/02/10(月) 21:42:42.61
他人のモジュールに頼るのは怠慢
そんなことではどんどん力が落ちていく
プログラマーならimport使わずに作れ
530デフォルトの名無しさん:2014/02/10(月) 21:54:11.96
ヒューッ
531デフォルトの名無しさん:2014/02/10(月) 21:55:18.13
そういうこと
標準ライブラリもいつ何があるか分からないからな
全部自分で作るんだよ
532デフォルトの名無しさん:2014/02/10(月) 21:56:46.61
GoとかDartとか皆笑ったけどあれが生き残りの戦略、そして本質だよ
533デフォルトの名無しさん:2014/02/10(月) 21:58:53.98
他人が作った言語なんか使うから右往左往する
プログラマーなら自分で作れ
534デフォルトの名無しさん:2014/02/10(月) 22:08:35.17
いやむしろ計算機なんか使うな。筆算で。
535デフォルトの名無しさん:2014/02/10(月) 22:19:39.58
でたな電卓ジジイ
お前は算盤やってろ
536デフォルトの名無しさん:2014/02/10(月) 23:06:24.01
Goはくるでぇ〜もう来てるけど、ビックウェーブが来るでぇ〜
動的言語はPython、静的言語はGoで決まりだ

一生懸命ステマしてたRubyは消え去るのみ、やっぱ本物しか残らないよねー
537デフォルトの名無しさん:2014/02/11(火) 07:58:36.52
enumarateってよく使うんだけどさ
日本人にはなじみのない英単語だし
つづりが長すぎて覚えられないんだよね
enumとか短く定義し直して使うことってできないかな?
538デフォルトの名無しさん:2014/02/11(火) 08:09:30.92
enumが3.4に入ったことを知った上での冗談に聞こえますが
539デフォルトの名無しさん:2014/02/11(火) 08:41:40.12
def enum(x):
return enumarate(x)

これでできたっす
質問にストレートに答えてくれない人には幻滅するっす
540デフォルトの名無しさん:2014/02/11(火) 09:38:22.45
君はこんな所に頼るべきではないよ
頑張ってくれ
541デフォルトの名無しさん:2014/02/11(火) 10:22:30.46
>>537
>つづりが長すぎて覚えられないんだよね

X: enumarate
O: enumerate
542デフォルトの名無しさん:2014/02/11(火) 10:30:27.10
>>537
補完してくれないの?
pycharm使ってるけど"e"だけで出てくるよ
543デフォルトの名無しさん:2014/02/11(火) 15:27:05.06
以下の例のような連想複合配列を実装するにはどうすれば良いのでしょうか?
a1 = ["aa", "ab", "ac"]
a2 = ["ba", "bb", "bc"]
......

で、リストary内に、
ary = ["n1" : ["aa", "ab", "ac"],
"n2" : ["ba", "bb", "bc"],
.......]
のようにしたいのですが
ary('n1').append(a1)や
ary('h1') = a1
などではエラーが出ました
544デフォルトの名無しさん:2014/02/11(火) 15:29:01.32
ごめんなさい、書きまちがえました
リストじゃなく、辞書でした
545デフォルトの名無しさん:2014/02/11(火) 15:31:03.95
何がわからないのかよくわかんにゃい

a = {}
b = [1,2,3,4]
c = [5,6,7,8]
a['b'] = b
a['c'] = c
print(a)
546デフォルトの名無しさん:2014/02/11(火) 15:37:31.76
>>539
enum = enumerate でもいいっすよ
547デフォルトの名無しさん:2014/02/11(火) 15:39:13.60
>>543
>ary('n1').append(a1)や
ary['n1'].append(a1)
548デフォルトの名無しさん:2014/02/11(火) 15:41:38.32
でももともと列挙はできるわけだしインデックスつけるのに何でenumerateなんだろう
indexingとかじゃ駄目だったの
549デフォルトの名無しさん:2014/02/11(火) 15:43:17.08
>>545,>>547
ごめんなさい、出来ました
何故エラーになったのか分からなかったのですが、d['n1'] = a1の形で出来ました
お答えいただきましてありがとうございました
550デフォルトの名無しさん:2014/02/11(火) 15:45:24.46
indexっていうありがちな変数名に被ることを避けたんじゃないの
そう思ったからあなたもindexって動詞形じゃなくindexingって名詞形にしたんでそ
551デフォルトの名無しさん:2014/02/11(火) 15:46:19.07
解決したならいいが
art = {...} 中括弧にするか
ary = dict([...]) この関数の引数にリストを与える
552デフォルトの名無しさん:2014/02/11(火) 15:49:40.52
>>548
Note C: Various alternative names were discussed: 以下を参照のこと
http://www.python.org/dev/peps/pep-0279/
553デフォルトの名無しさん:2014/02/11(火) 17:50:38.15
>>546
おおすげえ…組込関数を丸ごと別名に代入できるとは
こんなアクロバットなことできる言語が他にあるのか?
mapとかもそうなのだが、関数というものはカッコとペア
で使うものと思うタイプの人間には全く思いつかない応用だ
これなら引数にstart=があるパターンにも対応できる
ありがとうっす
554デフォルトの名無しさん:2014/02/11(火) 17:59:49.07
関数が第一級オブジェクトの言語なら何でもできるだろ
555デフォルトの名無しさん:2014/02/11(火) 18:31:42.55
むしろできない方がおかしいと思うのだが
556デフォルトの名無しさん:2014/02/11(火) 18:36:59.72
Rubyのことだね
557468:2014/02/11(火) 19:58:38.33
>>528
MIDIやOSCは、他の言語でも大抵ライブラリあるんだけど、
楽譜では、LilyPond という綺麗な楽譜を作れるシステムがあって、
それを使った周辺ツールが秀逸 (music21, abjad, mingus 辺り)

DAW では、アプリ側で提供されてるAPI以外特に何も使ってない。強いてあげるなら ctypes
ソフト側で組込スクリプトのサポートがあってもなくても
外からマクロ・ツール等でオートメーションするTipsが横行してたりします。
558デフォルトの名無しさん:2014/02/11(火) 20:00:31.84
> おおすげえ…組込関数を丸ごと別名に代入できるとは
関数系では, 古の Lisp の頃から, 当たり前
559468:2014/02/11(火) 20:07:20.78
〜続き
オーディオ・信号処理方面では、主に C++使ってるけど
Pythonでは、Guido が Audio File Format FAQ の著者だったりして
標準ライブラリにも名残があるね。waveとarray モジュールはよく使う。
scipy.signal辺りは、習得したいと思ってる。
560デフォルトの名無しさん:2014/02/11(火) 20:18:47.91
>>558
C言語も関数を変数に代入できるから関数系である

そういうことなんですね
とてもよくわかりました
561デフォルトの名無しさん:2014/02/11(火) 20:33:04.73
今まで使ったことがある言語でできないものは無かった。
割とメジャーな言語で、できないものってあるの?
562デフォルトの名無しさん:2014/02/11(火) 20:54:08.17
>>561
そのできた言語を全て上げてみな
そんなにメジャーじゃないだろう
563デフォルトの名無しさん:2014/02/11(火) 20:58:23.97
まず最初が日本語です
564デフォルトの名無しさん:2014/02/11(火) 21:05:47.63
少なくともマイクロソフトBASICとCOBOLとVBAはできない
Cもできないでしょ
printfを変数に代入できるか?
565デフォルトの名無しさん:2014/02/11(火) 21:13:57.82
>>561
できる:Python, JavaScipt, PHP, C, C++
できない:Ruby, Smalltalk, Java, C#

はっきり言って、メジャーな言語でも「できない」ものは多い

もちろん、できない言語もメソッドに値を適用(apply)できないだけであって、
クロージャや関数オブジェクトを使うことで同等の機能(=高階関数)は実現できる
ただし、>>546みたいに素直なコードが書けない、ってこと
566デフォルトの名無しさん:2014/02/11(火) 21:17:27.80
>>564
>printfを変数に代入できるか?

できる
標準ライブラリの関数 sort が典型例

Cにできないのは無名関数(ラムダ式)だよ
567デフォルトの名無しさん:2014/02/11(火) 21:37:15.00
JavaScriptで馬鹿みたいなコードが罷り通ってる一員でもある
568デフォルトの名無しさん:2014/02/11(火) 21:40:23.09
ちんこがかゆいってやつと同じだな
569デフォルトの名無しさん:2014/02/11(火) 21:43:32.61
Pythonのラムダで複文が書けなくて良かったと思ってる奴の数
570デフォルトの名無しさん:2014/02/11(火) 21:44:37.77
無名セックスなら得意なんだけどな
571デフォルトの名無しさん:2014/02/12(水) 03:09:56.83
lxmlって内部でunicode変換してるんだよね?
EUC-JPの文章を渡す場合、文字化けしないためにはどういう風にすればいいの?
先に文字列をdecode('euc-jp')して渡して、出力時に文字化けはしなくなったけど、<xml>部分にencode宣言あった場合エラーが出るようになって...
文字化け対策するにはどうしたらいいの?
lxmlに渡す前と後に処理する方法教えてもらえたらありがたいんだけど
572デフォルトの名無しさん:2014/02/12(水) 08:08:12.75
>>564
ネタだろうけど

#include <stdio.h>

int main()
{
int (*va)(char *, ...) = printf;
fprintf(stdout, "%08x\n", va);
fprintf(stdout, "%08x\n", printf);
return 0;
}
573デフォルトの名無しさん:2014/02/12(水) 12:58:10.04
>>571
<?xml の encoding という事であれば、

parser = lxml.etree.XMLParser(encoding="euc-jp")
root = lxml.etree.parse(io.open("test.xml", encoding="euc-jp"), parse=parse)

但し、バージョンが古いと非utf-8のXML読み込みでクラッシュする事もあったりした。
574デフォルトの名無しさん:2014/02/12(水) 16:09:53.07
>>573
答えてくれてほんとありがとう

もしそれがlxml.htmlの場合はどうなるの?
parse()の引数にencodingがないからエラーが出るけど
基本的にlxmlの文字化け問題って、lxmlに渡す前にdecode('EUC-JP').encode('utf-8')を行った方がいいんだよね?
自分はそれやってるんだけど上手くいってないけど...('A`)
575デフォルトの名無しさん:2014/02/12(水) 18:41:58.72
ごめん、自己解決した
lxmlの問題じゃなくて 、その前に噛んでたモジュールの問題だった
576デフォルトの名無しさん:2014/02/12(水) 23:35:27.19
>>566
>Cにできないのは無名関数(ラムダ式)だよ

C標準仕様には含まれていない(Appleが提案中)けど、
Blocks という仕掛けがクロージャに相当するから、
無名関数を値として引数やリターンで渡せるね
また Blocks はC言語拡張だから、C++/Obj-Cでも利用できる

詳しくは「ブロックプログラミングトピック pdf」でググルと、
Appleによる解説文書(日本語)が読める
577デフォルトの名無しさん:2014/02/13(木) 03:14:57.20
objective-C!!!
578デフォルトの名無しさん:2014/02/13(木) 16:16:26.43
IDEの話題ってあんまりでてこないね。
PyCharmってやつが使いやすかったのでおすすめしておく。
UIはモダン&シンプルな感じでゴテゴテしてなくてかっこいい。
動作もeclipseほど重くない。DjangoやFlaskも使える。

クラスとクラスの間は2行開けろ、みたいな
コーディングスタイル(PEP8)のWarningも出してくれるとは思わなかった…。
579デフォルトの名無しさん:2014/02/13(木) 16:45:50.97
>>575
自己解決?
[Python-ml-jp 5687] lxmlにて文字化け問題が解消出来ずに困っております。
http://www.python.jp/pipermail/python-ml-jp/2014-February/011179.html
580デフォルトの名無しさん:2014/02/13(木) 17:10:04.98
解決したようだけど、まとめ書いておくと

lxml.html の場合は、デフォルトのパーサ(lxml.html.HTMLParser)では unicode へデコードするだけでいい。
encode utf-8 は不要。

lxml.html でも XHTMLとして扱いたい(xpathで名前空間を使う)場合は、unicodeへデコードして、
parser = lxml.html.XHTMLParser(encoding="euc-jp") とXML同様にパーサを指定。
581デフォルトの名無しさん:2014/02/13(木) 18:37:03.44
スクリーンショットを連続で撮りつつそれを表示する(合わせ鏡状態になる)ソフトを作りたいんですが、マルチスレッドにしないとダメですよね
交互にスレッドを機能させるようにするにはどうすればいいんでしょう?
582デフォルトの名無しさん:2014/02/13(木) 19:29:10.31
>>578
俺もpycharm使ってるけど
やたらメソッドをstaticにしろって薦めてくるのはうざい
583デフォルトの名無しさん:2014/02/13(木) 19:34:59.76
お前もstaticにしてやろうか
584デフォルトの名無しさん:2014/02/13(木) 19:42:13.18
わかりにくいボケだなあ(誉め言葉)
585デフォルトの名無しさん:2014/02/13(木) 19:42:13.23
selfって書かないですむから、staticにできるものはstaticにした方がいいんじゃないの?
586デフォルトの名無しさん:2014/02/13(木) 20:37:14.20
他のメソッド呼び出したりインスタンス変数参照してないなら static にした方がいい

IDEだったら自動でリファクタリングしてくれる機能とか付いてない?
587デフォルトの名無しさん:2014/02/13(木) 20:56:31.17
>>582
ちょっと分かる なんかカーチャンに部屋掃除しろと言われてる気分になる
588デフォルトの名無しさん:2014/02/13(木) 21:27:07.26
>>581
純粋にスレッド間通信の話だとすると、メッセージ・キューを使うのが定番。
自分で実装するなら、こんな感じ

* 同期キュー (標準ライブラリのqueue) を用意
* スレッドA: キャプチャーを取りその画像の情報をキューに入れる
* スレッドB: キューから画像の情報を取り出して描画

実際は、何かGUIツールキット使ってれば、
大抵はイベント通知の仕組みが提供されてるはずなので、
スレッドを作るのはキャプチャーを取る方だけでいい。
589デフォルトの名無しさん:2014/02/13(木) 21:55:47.84
正直「交互に」動くならスレッドの意味ねーだろ
590デフォルトの名無しさん:2014/02/13(木) 22:20:18.62
交互にお互いを呼べば済むよな
591デフォルトの名無しさん:2014/02/14(金) 01:06:04.26
pythonでGUIを使うのに一般的に使われるライブラリってなんなの?
pygameはjpgを読み込んでくれなくて諦めたんだが。
592デフォルトの名無しさん:2014/02/14(金) 06:06:22.94
print "%04d" % 1 で 0001 と出力できますが、出力させるのではなく
変数 str に格納するにはどうすればいいですか?
593デフォルトの名無しさん:2014/02/14(金) 06:14:34.99
>>592
printしないで代入すればいい
594デフォルトの名無しさん:2014/02/14(金) 07:56:33.01
>>593
ありがとうございます。
595デフォルトの名無しさん:2014/02/14(金) 15:41:31.78
設定値やパラメータを呼び出そうとした場合、
MySQLなどデータベースに接続するのと、ConfigParserにてファイルに接続するのとどっちが早い?
各件のパラメータもたかだか2つ位なんだけど、
それが1000件くらいあると思う
ファイルだとそのコンピューター内に入れてられるからやっぱ早いよね?
DBサーバにわざわざ毎回接続しなくていいし
ファイルが更新されたらイベントドリブンでPythonを実行するサーバに送って上書きするだけだし
タイムラグはあるかもしれないけど
596デフォルトの名無しさん:2014/02/14(金) 15:54:27.68
ソケットでチャットシステムをつくってるんですが、画像とかファイルはどうやって送信するんでしょうか?
バイナリで文字列として送るんですか?
597デフォルトの名無しさん:2014/02/14(金) 15:56:40.00
>>595
ファイルベースのデータベースとして
sqlite3が有るけどこれではダメかな?
598デフォルトの名無しさん:2014/02/14(金) 16:07:55.98
>>596
バイナリはバイナリのまま送ります
599デフォルトの名無しさん:2014/02/14(金) 16:10:52.71
>>597
SQLiteって、確かにファイルベースだけど、
それを他のコンピューターに送った場合でも同じように挙動するの?
SQLiteってNoSQL並みに早いようだし、
それならLIKE文などで一致したものを
簡単に検索できるからありがたいんだけど

自分のやろうとしてた事のイメージとしては、
ファイルに各件のパラメータを記述し、
全コンピューターに送信
そしてmemcachedでもなんでもNoSQL系にイベントドリブンで登録
それをTrieなどで総当り検索...
とか思ってたんだけど、SQLiteからすると面倒だよね?
600デフォルトの名無しさん:2014/02/14(金) 16:13:43.10
あと、ファイルサイズはやっぱSQLITEの場合結構大きくなるのかな?
圧縮出来れば送信時に問題ないかもしれないけれど
601デフォルトの名無しさん:2014/02/14(金) 16:14:51.51
大学の実習か?
602デフォルトの名無しさん:2014/02/14(金) 16:18:46.34
Python for Windows extensionsみたいにexeで配布されているライブラリを
virtualenvの環境に入れる方法ってありますか?
setup.pyがあるものもありますが、エラーがでてしまうのでexeでやりたのですが
603デフォルトの名無しさん:2014/02/14(金) 16:32:23.37
ちょっとSQLiteスレ行ってきます
604デフォルトの名無しさん:2014/02/14(金) 20:51:27.93
宿題を他人にやらせるような奴は良いプログラマになれないが良い経営者になれるかもしれない
605デフォルトの名無しさん:2014/02/14(金) 21:00:43.96
>>602
Can I install Python windows packages into virtualenvs? - Stack Overflow
http://stackoverflow.com/questions/3271590/can-i-install-python-windows-packages-into-virtualenvs
606デフォルトの名無しさん:2014/02/14(金) 21:31:41.66
PyCharmで
if a == 0: continue
みたいに1行で書くと怒られるんだが、みんな改行してるの?
607デフォルトの名無しさん:2014/02/14(金) 21:36:11.86
>>605
できました!
ありがとうございます!
608デフォルトの名無しさん:2014/02/14(金) 21:37:36.94
>>606
俺は改行してる
609デフォルトの名無しさん:2014/02/14(金) 21:44:16.86
>>606
PEP8 順守して、改行してる
610デフォルトの名無しさん:2014/02/15(土) 00:53:49.35
ary = ("abc", "DEF", "xYz")
r = "xyz"
print r in ary
でTrueを出したいんですが、どうすればいいですか?
ary.lower()ではFalseとなってしまいます。
611デフォルトの名無しさん:2014/02/15(土) 00:56:07.05
urllib2からhtmlファイル取得したあとに
その中のjqueryで反応するボタン押した後のレスポンスデータ欲しいんですけど
可能ですか?
612デフォルトの名無しさん:2014/02/15(土) 01:00:16.11
無理です
613デフォルトの名無しさん:2014/02/15(土) 01:22:55.24
パッとは map 使うのを考えたけどいろいろ
http://stackoverflow.com/questions/3627784/case-insensitive-in-python
614デフォルトの名無しさん:2014/02/15(土) 12:07:09.37
http://kohada.2ch.net/test/read.cgi/prog/1190866177/816
  ↑   ↑   ↑   ↑   ↑  
615デフォルトの名無しさん:2014/02/15(土) 12:25:35.97
>>604
知り合いは、皆、そこそこの上場企業の社員になったよ
616デフォルトの名無しさん:2014/02/15(土) 12:27:04.16
自力でやったヤツらは、大体が学者か技術者かニートになった
617デフォルトの名無しさん:2014/02/15(土) 13:58:56.06
俺はたこ焼き屋の屋台主になったけどな
618デフォルトの名無しさん:2014/02/15(土) 15:36:49.98
re.matchとre.searchの違いは何ですか?
マニュアル読んでもよく分からないのですが
619デフォルトの名無しさん:2014/02/15(土) 16:10:27.94
>>> bool(re.match('a', 'ab'))
True
>>> bool(re.match('b', 'ab'))
False
>>> bool(re.search('b', 'ab'))
True
>>>

matchは探索対象文字列の先頭にパターンがないとマッチしない
searchはどこにパターンがあってもマッチする
620デフォルトの名無しさん:2014/02/15(土) 17:18:45.58
Falseの判定入れるのが面倒なので

for p in re.findall():
でループするのが一番楽と気づいてから
matchもsearchもめったに使わなくなった
621デフォルトの名無しさん:2014/02/15(土) 17:35:34.32
公式のマニュアルに search() vs. match()って項目があったはず
622デフォルトの名無しさん:2014/02/15(土) 18:36:08.06
例えば、ターミナルからpythonスクリプトを実行して、
$ python sample.py
エラーが発生するとターミナル上にエラー内容が出てくるよね
コレをファイル上に書き込みたいんだけど何かいい方法ある?
スクリプト最初にtry-catchを書いて、Exceptionを書き込めば出来るとは思うけど、もっとスマートなやり方が無いかなぁと
623デフォルトの名無しさん:2014/02/15(土) 18:41:09.35
import sys
sys.stdout = open("result.txt","w")
624デフォルトの名無しさん:2014/02/15(土) 18:42:17.61
python sample.py 2> error.log
625デフォルトの名無しさん:2014/02/15(土) 18:47:38.14
あっ、ありがと
自分としては自分でスクリプト実行するより自動起動させたいと思ってたから、
>>623の方法試してみる

>>624もありがとね
626デフォルトの名無しさん:2014/02/15(土) 18:54:20.93
例外なら標準出力ではなく標準エラー、
すなわちsys.stderrに書き込まれると思うけど
あとsys.excepthookにデフォルトハンドラを設定したりもできるよ
627デフォルトの名無しさん:2014/02/15(土) 21:25:29.91
itertools.takewhile について教えてください。

from itertools import takewhile
a = (1,4,5,8,10)
for i in takewhile(lambda x: x in a, range(1,10)):
  print(i)

の出力は
1

となるんですが、これは↓と等価ではないのでしょうか?

for i in range(1,10):
  if i in a:
    print(i)
1
4
5
8

takewhile に限らず、どこか間違っていますか?
628デフォルトの名無しさん:2014/02/15(土) 21:29:45.59
ちゃんとitertoolsのヘルプに「以下のスクリプトと同等です」って書いてあるから読めよ
http://docs.python.jp/3/library/itertools.html#itertools.takewhile
629デフォルトの名無しさん:2014/02/15(土) 21:32:47.38
>>628
読んでるんですけど、
>>627で書いてるのと等価じゃないんですかそれ?

あと、>>627はほんとは

for i in takewhile(lambda x: x not in a, range(1,10)):

とやりたかったのでしたすんません。
630デフォルトの名無しさん:2014/02/15(土) 21:35:24.33
>>629
else: breakが目に入ってれば等価だと思えるはずがない
結論:読んでるつもりなだけで読んでない
631デフォルトの名無しさん:2014/02/15(土) 21:37:45.51
条件が成立している「かぎり」シーケンスを取り出す
のと
条件が成立しているシーケンスを取り出す
のは全然違うだろ
632デフォルトの名無しさん:2014/02/15(土) 21:43:41.11
>>630,631
すいません、読んでるつもりになってました。
理解しましたありがとうございました。
633デフォルトの名無しさん:2014/02/16(日) 01:12:26.06
loggingってどういう用途で使用するのが便利なんですか?
DEBUG:root:でばっぐ
INFO:root:いんふぉ
WARNING:root:わーにんぐ
みたいな情報出しても、殆ど意味が無いように思うんですが
皆さんはどのように活用されているのでしょうか?
634デフォルトの名無しさん:2014/02/16(日) 02:49:41.99
>>581からインスピレーションを得て同じLAN内にある別のPCの画面のスクリーンショットを撮り続け
それをサーバー(自機)に送信して動画っぽく見せる監視ソフトを作ってみたんだが、遅くて話にならなかった
こういうのはC#で書くべきだと改めて認識できたのは良かったが……
635デフォルトの名無しさん:2014/02/16(日) 02:56:59.15
Dive into Python3 がめちゃくちゃ面白くてハマってるんですが
こういう読み物としても面白い解説サイト、他にないですかね。おしえてくだはい。
Pythonに関係なくてもいいので…。
636デフォルトの名無しさん:2014/02/16(日) 06:09:19.11
PEP8
637デフォルトの名無しさん:2014/02/16(日) 10:12:46.88
>>633
小さなプログラムで使ってるとたぶんメリットないよ
規模が大きくなってくるとモジュールごとにフィルターしたりしたくなってくる
linux使ってるならsshdのログとかsyslog見てみ
638デフォルトの名無しさん:2014/02/16(日) 12:49:57.26
あとは出力を切り替えたり複製したり
コンソールにはinfoレベルで、ファイルにはdebugレベルで、errorレベルはメールするとか
そういうのが必要ないなら全く無用の長物
639デフォルトの名無しさん:2014/02/16(日) 13:18:29.35
四捨五入したくて
round(0.25, 1)
としたら、浮動小数点が原因?で0.2になったので
round(25, -1)
としてみたら、20になりました。
これは関数内で*10^-1して、計算してるのですか?
0.3が得られる方法を教えてください。
640デフォルトの名無しさん:2014/02/16(日) 13:20:55.50
>>639
python3.3.3 でやってます!
641デフォルトの名無しさん:2014/02/16(日) 13:23:11.08
今のところ自分で書くのみです
頑張ってください
642デフォルトの名無しさん:2014/02/16(日) 13:30:41.66
decimal使えよ
あれはあれでウンコ仕様だけどね

decimalではroundじゃなくてquantizeメソッドで丸めを行う
643デフォルトの名無しさん:2014/02/16(日) 13:33:28.01
decimalはなんか使いづらくて敬遠してしまう
普通の整数演算を完全10進演算にすりゃいいと思うんだが
もうメモリの多寡やCPUの性能を気にする時代でもないだろ
644デフォルトの名無しさん:2014/02/16(日) 13:37:33.60
例えばこのようになる

>>> from decimal import *
>>> d = Decimal('0.25')
>>> d.quantize(Decimal('.1'))
Decimal('0.2')
>>> d.quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Decimal('0.3')
>>>

な、一目でウンコだろ?
こんなのroundのオプションでやらせろよ
くど過ぎて眩暈がする
645デフォルトの名無しさん:2014/02/16(日) 14:52:27.29
浮動小数点怖い・・
>>> 0.1 + 0.1 + 0.1 == 0.3
False
>>> 0.1 * 3 == 0.3
False

http://docs.python.jp/3.3/tutorial/floatingpoint.html#tut-fp-issues
646デフォルトの名無しさん:2014/02/16(日) 14:55:46.19
自分で四捨五入の関数作ればええやん
647デフォルトの名無しさん:2014/02/16(日) 15:39:58.81
統合で比較する香具師は馬鹿
648デフォルトの名無しさん:2014/02/16(日) 16:14:26.54
オススメのValidatorってありませんか?
フォームだけに特化したものだけでなく、
HTTPの型だとか、ありがちな引数の型とかを検証してくれたりするものがあれば助かるのですが
649デフォルトの名無しさん:2014/02/16(日) 16:22:10.05
re
650デフォルトの名無しさん:2014/02/16(日) 16:43:49.12
あ、なんかmoduleとかオープンソースのとか既成のバリデーター教えてもらえるとありがたいです
651デフォルトの名無しさん:2014/02/16(日) 17:25:56.84
たぶん、誰も>>648の質問理解できてないから、もうちょっとやりたいことはっきり書いた方がええよ
652デフォルトの名無しさん:2014/02/16(日) 17:37:42.62
Pythonとは無関係でXMLに関する質問ならば、
Relax NG(RNG) や XML Schema(XSD) みたいな「XMLスキーマ定義言語」と
それらの Validator を調べたらいいんジャマイカと
探せば、きっとPythionバインディングもあるはず....
653デフォルトの名無しさん:2014/02/16(日) 17:39:11.91
"HTTPの型" が何を指してるのか解らないけど、anntools みたいなの?
654デフォルトの名無しさん:2014/02/16(日) 18:15:29.79
Email,URI以外に何があるっけ?
日本語のコード番号\uXXとかを判定するとか
後はヌルバイトや特殊文字を除去、javascriptやHTMLタグを除去したりとセキュリティ面でのバリデート
セキュリティ面でのバリデートは絶対に必要だね
655デフォルトの名無しさん:2014/02/16(日) 18:18:38.71
656デフォルトの名無しさん:2014/02/16(日) 18:46:41.89
俺はHTTPの型ってのが何なのか知りたい
夜も眠れない
657デフォルトの名無しさん:2014/02/16(日) 18:49:58.90
resp.code == 404 的な話じゃないか
658デフォルトの名無しさん:2014/02/16(日) 18:56:27.47
POSTとGETの判定か?と思ったけど、さすがにそこまでくると頭おかしいよな
そんなもんVerb == 'GET'でいいんだから
659デフォルトの名無しさん:2014/02/16(日) 20:18:44.96
みんなエスパー志望なのね
ゆとりは放置でいいのに
660デフォルトの名無しさん:2014/02/16(日) 21:21:51.03
でも>>654みたいなバリデーターあれば知りたい
PHPの方でnullバイト対策とかやってたけど、未だにセキュリティ面での確証が持てない
外部の人間だけでなくて、内部の人間のミスやいたずら等も管理したいからなぁ
何かそういうのでいいのある?
どっか他で聞いたほうがいいかな?
661デフォルトの名無しさん:2014/02/16(日) 21:27:44.58
うん
このスレ PHP の三文字だけでもう勘弁してくれ状態になってる
662デフォルトの名無しさん:2014/02/16(日) 21:59:19.15
>>>year = 1868
>>>if year == 1868
... print u"明治元年"
...
明治元年

というプログラムが本に書いてあったんですが
このプログラムで、u"明治元年"のuはどういう意味ですか?
663デフォルトの名無しさん:2014/02/16(日) 22:05:48.63
Unicode 文字列リテラル
664デフォルトの名無しさん:2014/02/16(日) 22:16:44.64
>>662
みんなのPythonの第2版(あるいはもっと前?)を
ご覧のことと思いますが、第3版も目を通しておくとよいかと。
665デフォルトの名無しさん:2014/02/16(日) 22:27:49.76
Pythonのバリデータって、
https://pypi.python.org/pypi/colander/1.0b1
とか
フレームワークに組み込まれてたら、それ使うんじゃないの
使ったこと無いからしらん
666デフォルトの名無しさん:2014/02/16(日) 22:38:30.39
オブジェクトのリストから、特定のプロパティのリストを取得するには、
forで回して作るしかないのでしょうか?

matlabのように

p_list = [ obj_list.('name') ]

という感じで、スマートに書くことはできませんか?
667デフォルトの名無しさん:2014/02/16(日) 22:49:23.19
>>666
map()関数
668デフォルトの名無しさん:2014/02/16(日) 23:09:33.22
>>667
解答感謝です。
以下のようにして、実現できました。

p_list = map((lambda x: x.name), obj_list)
669デフォルトの名無しさん:2014/02/16(日) 23:15:35.61
>>668
関数形式の標準演算子があるoperatorモジュールも併せてどうぞ
670>>662:2014/02/16(日) 23:31:11.82
>>662コードのインデントが投稿に反映されなかったんですが困った...
iPhoneブラウザBB2Cから半角スペース入力したんですが...
二文字以上連続半角スペースは無効なのか。
全角スペースは何故か日本語でも打てない。
Pythonなのではっきりさせておきたいです

>>664
本よくわかりましたねw
初版第三刷(2010年)です
誤植という事ですか?
二版になっても直ってなかったというのはちょっとアレですね。
671デフォルトの名無しさん:2014/02/16(日) 23:49:58.36
↓全角スペース
 
↓全角スペースx4
    
クリップボードに入れておくと捗る

んで>>662は、if year == 1868: ←コロンが抜けているね
672>>662:2014/02/16(日) 23:57:52.92
>>671
全角スペースありがとうございます!
辞書登録しておいたので次からできそうです
コロン忘れてました...注意しなくては
673664:2014/02/17(月) 01:38:26.21
>>670
言葉が足らずにて失礼しました。

第3版は2012年に発行され、
今後主流になると思われる
Python3系列に基づいた記事が書かれています。

旧版が対象とするPython2系列とは
結構な差異があって、
今回のように参考書を読むときなど注意が必要です。
674デフォルトの名無しさん:2014/02/17(月) 13:38:20.77
pyenvはどこに置くのが適切なのでしょうか
一般ユーザの~/.pyenvにインストールしたのですが、rootから見えなくて困っています
rootで入れなおすべきでしょうか
675デフォルトの名無しさん:2014/02/17(月) 14:42:57.49
エラーハンドラの捕獲について聞きたいんですが、
try:
print"エラー前"
raise(Exception) #エラー発生
print"エラー後"
raise(Exception)
print"あなたエラー多すぎ"
except Exception as e:
func_for_error() #これをエラー発生の度に呼び出したい

上記のようなことはできないのでしょうか?
自分としては、エラー発生後、func_for_error()を実行し、またtryの中に戻る、
そしてprint"エラー後"などを実行させて、エラー後、またfunc_for_error()を実行
と繰り返していきたいのですが
つまり、エラー発生しても上記のprintの内容を全部表示させたいのです

try-catch文でなくとも、何か他の方法でも実現できないでしょうか?
676デフォルトの名無しさん:2014/02/17(月) 15:42:58.42
>>674
起動するだけなら
/home/ユーザ/.pyenv/versions/バージョン/bin/python hoge.py
で出来るよ
677デフォルトの名無しさん:2014/02/17(月) 15:52:11.83
rootで見えないのがわからんし、そもそもrootでアクセスしないといけないような環境構築しようとしてるのが不安です

>>675
3回try-exceptするんじゃだめなのか
それが嫌なら、エラー回数を引数に持つ関数か状態に持つクラスをつくる
678デフォルトの名無しさん:2014/02/17(月) 17:03:26.83
>>675
例外を使う理由は?
そのコードだと raise Exception() する代わりに func_for_error() 呼ぶだけていい。
679デフォルトの名無しさん:2014/02/17(月) 17:30:25.75
>>677-678
上のコードは例えの話でして
一つのファイル上にtry-exceptを何度も入れてもいいんですが、
それだとめんどくさいのと、汎用性がない、
また、予期しないエラーが発生した時に補足できない、
エラー時に処理が止まるというデメリットがあります
それを、その中で発生したエラーは補足しながら別ファイルに書き込みながら、
上から下まで一気にスクリプトを動作させたいと思いまして

全体を
def main():
でくくってしまい、
if __name__=='__main__':
try:
main()
except Exception as e:
func_for_errors()
などで出来ないかなとか考えていました
680デフォルトの名無しさん:2014/02/17(月) 18:53:46.86
本当に例外的な状態なのか疑わしい
681デフォルトの名無しさん:2014/02/17(月) 19:00:55.68
>エラー回数を引数に持つ関数か状態に持つクラスをつくる
じゃあ、これでいいでしょ。だめなの?

正直、 何でtryの中でraise(Exception)してるのかがわからん
682デフォルトの名無しさん:2014/02/17(月) 19:02:57.52
まあ下手の何とやらな気がするし深くは追求しない
勝手に好きなようにやってくれ
683デフォルトの名無しさん:2014/02/17(月) 19:26:35.09
要するに on error resume next が欲しいってことじゃね
684デフォルトの名無しさん:2014/02/17(月) 19:56:48.68
これで、ええやん
http://ideone.com/LicRDI
685デフォルトの名無しさん:2014/02/17(月) 21:56:41.93
>>681
いや、それはわざと例外発生させて、その後でもprint文を実行させるように出来ないかということでraise()してます
686デフォルトの名無しさん:2014/02/17(月) 23:22:08.36
>>676 今はそうしているのですが、それが普通なのですか?
他にrootでパスを通す、rootで入れなおすなどの方法がありますが(実際にやってないです)
どうするのが適切なのですか?
687676 686:2014/02/17(月) 23:32:39.10
連投すみません。

>>677
rootになる目的はbottleでhttpのポート(80)で通信するためです
688>>662:2014/02/17(月) 23:36:35.08
>>673
どうもです
自分も感じましたが初版は2系列中心に3系列も補って説明という形式になってて、ごっちゃになっててやりづらいです。
最新の仕様の勉強さえできればいい自分には三版が良さそうです。
689デフォルトの名無しさん:2014/02/18(火) 00:24:07.92
>>688
http://ideone.com/LicRDI
じゃ、だめなの?
690デフォルトの名無しさん:2014/02/18(火) 00:55:41.27
import sqlite3
t = 'hanako'
db.execute('SELECT * FROM dbname where name = ?', (t, ))
は通るのですが、
s = 'dbname'
db.execute('SELECT * FROM ?', (s, ))
はエラーが出て通りません
いわゆるプリペアドステートメントを実装したいのですが、どのようにすればいいのでしょうか?
691デフォルトの名無しさん:2014/02/18(火) 01:17:31.15
>>690
s = 'dbname'
db.execute('SELECT * FROM {}'.format(s))
692デフォルトの名無しさん:2014/02/18(火) 20:30:31.70
fromのあとってtable名やろ
693デフォルトの名無しさん:2014/02/18(火) 20:51:12.19
ヒヒーン
694デフォルトの名無しさん:2014/02/18(火) 21:00:44.69
python3でsqlite3を使ってるんですが、
commit()を実行すると、ごく稀に予期せぬ
「sqlite3.OperationalError: database is locked」というエラーが発生してcommit()に失敗します。

どういった原因が考えられるでしょうか?

ソースコード中のいろいろなクラスからdb(xxx.sqliteという1つのファイル)にアクセスしていますが、execute('UPDATE or INSERT or DELETE うんたら') の後は必ずcommit() を行っています。dbがlockされているということに心当たりがありません。

どのオブジェクトがdbをlockしているのかを知る方法などないものでしょうか。d=(^o^)=b

ちなみに、dbへの接続はオプションなしでやってます。
conn = sqlite3.connect('xxx.sqlite')
695694:2014/02/18(火) 21:18:06.91
694の続きです。

DBアクセスを行う複数のクラスのインスタンスが、
それぞれDBへのコネクション【self.conn = sqlite3.connect('xxx.sqlite3')】を持っています。
具体的には以下のようなコードになってます。

class A:
  def __init__(self):
    self.conn = sqlite3.connect('xxx.sqlite3')

class B:
  def __init__(self):
    self.conn = sqlite3.connect('xxx.sqlite3')

class C:
  def __init__(self):
    self.conn = sqlite3.connect('xxx.sqlite3')

よろしくお願いします。
696デフォルトの名無しさん:2014/02/18(火) 22:01:02.03
>>695
答えじゃないけど、1個のDBにConnectionオブジェクトいくつも作らないほうが安全そうに思えてならないけど。

class A:
  def __init__(self, conn):
    self.conn = conn

def main():
  conn = sqlite3.connect('xxx.sqlite3')
697デフォルトの名無しさん:2014/02/18(火) 22:15:39.93
複数接続とSQLiteのBEGIN DEFERRED問題かねぇ?
接続を一つにして各インスタンスにはカーソルを与えるとか
isolation_levelをIMMEDIATEとかにするとか
トランザクションをwithステートメントで制御するとか?
698デフォルトの名無しさん:2014/02/19(水) 20:29:54.92
>>694
マルチスレッドだったりするのかな?
直接的な解決策ではないけど、接続はひとつにして複数カーソルを扱う方法に +1
アプリケーション内での使い方によっては自分で排他制御が必要

>どのオブジェクトがdbをlockしているのかを知る方法

lockのオーナーまでは解らないけど、
3.2以降なら connectionオブジェクトの in_transaction 属性がある
699694:2014/02/20(木) 02:30:11.92
皆さんレスありがとうございます。
接続(Connectionオブジェクト)を1つにして、
それをクラス間で共有する形に書き換えてみました。
一見問題なく動いたのですが、とある箇所でlockとは別のエラーが発生します。

というのも、複数のスレッド間でConnectioオブジェクトを
共有しようとすると怒られてしまいます。
「sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread.」

具体的に言いますと、
今、以下の2つのクラスから成るWebサービスプログラム作っています。
- クラスA:定期的に裏で動作してWeb上のデータを収集しDBに保存する
- クラスB:ユーザーのリクエストに応じて、DBから情報を取り出し提供する
A、B2つのクラスが同時に動作(マルチスレッド?)する際に、
複数スレッド間でConnectionオブジェクトの共有が発生してsqlite3エラーとなってしまいます。

ちなみに、Connectionオブジェクトの共有方法ですが、以下のようにやってます。
config.pyの中で、
  CONN = sqlite3.connect('xxx.sqlite3')
app.py(クラスA、Bが含まれるモジュール)の中で、
  import config
  conn = config.CONN
700694:2014/02/20(木) 02:31:43.24
699の続きです。

>アプリケーション内での使い方によっては自分で排他制御が必要
この排他制御ですが、自分には実装方法の検討がつかずちょっと厳しそうです。

となると、こういう場合
SQLiteを使うのはあきらめて、MySQLなどの本格的な(?)DBを使ったほうが賢明ですかね…?

>in_transaction 属性がある
おお、これを使えば問題の切り分けが捗りそうですね。
701デフォルトの名無しさん:2014/02/20(木) 03:46:26.47
馬鹿には無理
702デフォルトの名無しさん:2014/02/20(木) 11:36:54.38
for i in sorted(dic.values()):
print(i)
値でソートした辞書のkeyを順番にとりだしたいのですが、
上のように書くと値しかでず、.items にすると、キーでソートされます。
いい方法ありませんか?
703デフォルトの名無しさん:2014/02/20(木) 12:07:10.54
sorted(dic.items(), key=operator.itemgetter(1)) # key=lambda item: item[1]
704デフォルトの名無しさん:2014/02/20(木) 13:50:50.76
sorted(dic.items(), key=lambda x: x[1])
705デフォルトの名無しさん:2014/02/20(木) 18:35:04.83
import MySQLdbで使える、python-mysqlってプレースホルダー存在しないの?

cur.executemany('INSERT INTO books(title, price) VALUES(%s, %s)',
[('Book A', 1000), # プレースホルダーは%s固定でかつクォーテーション不要('%s'とはしない)
('Book B', 2000), # INSERTは即時反映 (commit不要)
('Book C', 3000)])

上はWeb上で見つけたんだけど、こんなやり方しかないの?
sqlite3みたいに:placeとか?で置き返れたり
これ、SQLインジェクション大丈夫なのかな?
sqlite3モジュールの方ではこのやり方はSQLインジェクションの危険があるとか書かれていたけど

>この時、クエリーを Python の文字列操作を使って構築することは、安全とは言えないので、すべきではありません。
>そのようなことをするとプログラムが SQL インジェクション攻撃に対し脆弱になりかねません。
706デフォルトの名無しさん:2014/02/20(木) 18:53:01.90
http://mysql-python.sourceforge.net/MySQLdb.html#using-and-extending
書いてあるから嫁よ

あと意地悪な言い方するとプレースホルダーって別に暗黙にエスケープするように保証されてるわけじゃないし
よく確認しなくてどつぼにはまってもしらねーぞ
707デフォルトの名無しさん:2014/02/20(木) 19:03:02.92
String constant stating the type of parameter marker formatting expected by the interface.
Set to 'format' = ANSI C printf format codes, e.g. '...WHERE name=%s'. If a mapping object is used for conn.execute(),
then the interface actually uses 'pyformat' = Python extended format codes, e.g. '...WHERE name=%(name)s'.
However, the API does not presently allow the specification of more than one style in paramstyle.

だ、そうです。
残念でした。
708デフォルトの名無しさん:2014/02/20(木) 23:10:43.47
>>699
スケーラビリティではなく、マルチスレッドとロックに関する問題なので、
データベースの変更は根本的な解決にならないと思う。アプリケーションの設計の問題。

可能なら、バックグラウンド処理は別プログラム/別プロセスに別けた方が楽じゃないかな。
書き込み専用の接続は isolation_level='IMMEDIATE' で作る。
読み取り専用の接続は 従来通りに。


====
マルチスレッドで作る場合、
データベース専用のスレッドをひとつ用意、その**スレッド内で**接続を作り
他のスレッドからは同期Queueを通じてスレッドとデータをやりとりするような仕組みを作る

標準ライブラリの queueが使えます。仕組み的には "task queue", "message queue" 辺り。

自分も今sqlite3触ってるとこなので、時間あったらサンプル書いてみる。
709デフォルトの名無しさん:2014/02/21(金) 01:00:53.30
20〜24時の間だけ動いて、他の時間は何もしないアプリを作りたいんですが
現在時刻を一定間隔で取得して20〜24時以外の時はpassでよいのでしょうか?
710デフォルトの名無しさん:2014/02/21(金) 01:29:21.88
何で?
色々とやり方あるけど、最も簡単なやり方としては、sleep()すればいいじゃん
711デフォルトの名無しさん:2014/02/21(金) 01:48:07.44
>>705-707
えっ、escape_stringでいいんじゃないの?
ただ、最新版はそんなこともすることが無いと思うんだけど
皆はどうやってるの?
712デフォルトの名無しさん:2014/02/21(金) 11:26:21.54
>>703-704
できました! ありがとうございます!
713デフォルトの名無しさん:2014/02/21(金) 16:26:00.44
>>709
OSのスケジューリング機能を使った方がよくね?
714デフォルトの名無しさん:2014/02/21(金) 18:40:15.83
>>711
アプリケーション層では、なるべく自分でescapeみたいなコードは書かない。
ORMやプレースホルダ任せ。ライブラリがきちんとしてるかはテストで確認。
715デフォルトの名無しさん:2014/02/21(金) 22:07:05.31
mysqlのライブラリでプレースホルダ使えるライブラリってあるの?
http://mysql-python.sourceforge.net/
>Parameter placeholders can only be used to insert column values.
insert文だけ

http://dev.mysql.com/doc/connector-python/en/index.html
こっちはバリデートしろとか書いてあるから、たぶん使えないよね

http://legacy.python.org/dev/peps/pep-0249/
これもないっぽいよね

sqlite3しか使わんからわからんけど、mysql使ってる人ってどうしてるんですか?
SQLAlchemy使ってるのかな
716デフォルトの名無しさん:2014/02/21(金) 22:35:32.28
ぼくオブジェクトDB派なんで
717デフォルトの名無しさん:2014/02/21(金) 23:16:46.89
>>714
それって危なくないの?
俺PHPからPython来た人間だから、addslashesや各データベースに備わっているescape関数使わんと何か恐ろしい

ORMに頼るのならまぁ分かるが、MySQLdbそのまま使って変数をそのままSQL文に入れるとか常軌を逸してると思うんだけど

http://www.php2python.com/wiki/function.addslashes/
こういうのを変数前にかませるべきだと思うんだけど
Pythonの仕様はまだ良く分かってないから何とも言えんけど、やっぱやった方がいいと思うんだけど
718デフォルトの名無しさん:2014/02/21(金) 23:33:23.19
PHPこそ全部PDO任せで済んだ気がするが
>>714みたいなのが通例で確実じゃないか?
719デフォルトの名無しさん:2014/02/21(金) 23:39:53.48
>>718
俺もそう思う
>>717>>714
>ライブラリがきちんとしてるかはテストで確認。
っていう部分どう認識してるんだ
720デフォルトの名無しさん:2014/02/21(金) 23:51:03.36
馬鹿には無理
721699:2014/02/22(土) 02:21:01.23
>>708
前者の方法で書きなおしてみます。
皆さんいろいろとご丁寧にありがとうございました。
すんげー勉強になりました。
722デフォルトの名無しさん:2014/02/22(土) 08:54:29.15
PHPからって時点でお察し
723デフォルトの名無しさん:2014/02/22(土) 11:07:45.10
ぺちぱー
724デフォルトの名無しさん:2014/02/22(土) 11:37:06.48
この2つの違いってなんですか?
どっちもwithの中を実行した後に、pageを閉じるっていう動作をするみたいだけど。

with closing(urlopen('http://www.python.org')) as page:
for line in page:
print(line)
with urlopen('http://www.python.org')) as page:
for line in page:
print(line)
725デフォルトの名無しさん:2014/02/22(土) 12:06:32.71
なんでおれにきくの?
726デフォルトの名無しさん:2014/02/22(土) 12:14:41.05
closing って普通にやっても通らないんだけどなにを import してるんだろう
727デフォルトの名無しさん:2014/02/22(土) 12:28:27.30
>>724
Python3.xなら特に違いはない
2.xだとurlopenで戻されるオブジェクトはwith構文に対応していないから
下は__exit__が見つからなくて実行時エラーを起こす
728デフォルトの名無しさん:2014/02/22(土) 12:29:31.65
>>726
contextlib.closingだよ
729デフォルトの名無しさん:2014/02/22(土) 14:36:40.87
>>717
危険だと思うコードがあるなら、実際にテストを書いて試してみよう。

何か誤解してるけど、escapeしてない値を直接クエリに組み込んでる訳ではないよ。

>>715 の一番下のリンクに書いてある
Pythonの Database API execute(query, parameters) の項では

プレースホルダは、paramstyleの何れかが使える。値のエスケープについては、
注釈[5] によると、(parametersで渡す値には)エスケープを要求すべきでないと書かれてる。

> The client should not be required to "escape" the value so that it can be used
> - the value should be equal to the actual database value.

プレースホルダ内でのエスケープの扱いについては明言された文は見つけられなかったけど、
何れにしても実装が規格に準じてるかどうかは別の話なので、テストは必須。
730デフォルトの名無しさん:2014/02/22(土) 14:39:02.10
>>727
なるほどー。ありがとう。
731デフォルトの名無しさん:2014/02/22(土) 15:06:27.37
>>728 ありがとう勉強になった。
732デフォルトの名無しさん:2014/02/22(土) 15:39:35.92
733デフォルトの名無しさん:2014/02/22(土) 19:34:25.60
ぺちぱー
734デフォルトの名無しさん:2014/02/23(日) 10:09:29.91
>>721
不要に成ったかもしれないけど、マルチスレッドでSqlite3 database を扱うサンプル
ideone.com/GDlzCR
735デフォルトの名無しさん:2014/02/23(日) 14:52:47.16
質問させて頂きます。
同一ネットワーク上にあるpcやスマホのipアドレス、macアドレスを取得したいのですがどのような方法があるのでしょうか?
バージョンは2.7です
またこのような処理は一般的にどのような名称なのでしょうか?トポロジー?
736デフォルトの名無しさん:2014/02/23(日) 15:26:37.27
ARPをブロードキャストするだけじゃねーの
使うならsocketだろう
トポロジー?学がないから知らね
737デフォルトの名無しさん:2014/02/23(日) 15:44:07.39
default gateway に対して proxy arp だな
738デフォルトの名無しさん:2014/02/23(日) 16:57:53.68
>>736
>>737

ありがとうございます。
arpで完成しました
739デフォルトの名無しさん:2014/02/23(日) 18:02:59.97
def hoge(*args): みたいな関数定義を見かけるんですが、
この「*args」ってなんなんでしょ?
740デフォルトの名無しさん:2014/02/23(日) 18:14:47.65
>>739
可変長引数
741デフォルトの名無しさん:2014/02/23(日) 18:32:28.74
(defun hoge (x &rest y) )だな
742デフォルトの名無しさん:2014/02/23(日) 20:30:46.70
上に出てきたスレッドって全然わかんないんだけど
テキストファイルを読んで加工してまたテキストファイルに
吐き出すような用途でPythonを使う限りは
知らなくても構わんですか?
743デフォルトの名無しさん:2014/02/23(日) 22:07:02.87
ぜぇ?んぜん構いません
744デフォルトの名無しさん:2014/02/23(日) 22:19:49.94
>>734
ありがとうございます!
こういう実用的なサンプルコード、ありがたいです。
745デフォルトの名無しさん:2014/02/24(月) 01:16:35.93
Perlの'a'..'z'のようなa〜zまでの文字列を生成することは出来ますか?
746デフォルトの名無しさん:2014/02/24(月) 01:37:58.78
考えたことなかった
rangeで...無理か
747デフォルトの名無しさん:2014/02/24(月) 01:41:52.70
「a〜zまでの文字列を生成する」ってどういう時に使うの?
748デフォルトの名無しさん:2014/02/24(月) 01:42:20.08
for i in range(ord('A'), ord('Z')+1)
でいけるみたいよ
749デフォルトの名無しさん:2014/02/24(月) 02:20:24.81
範囲生成なら range 小文字の集合が必要なら string.ascii_lowercase
750デフォルトの名無しさん:2014/02/24(月) 04:20:53.74
パスワード生成みたいなところでしか使ったことないな
751デフォルトの名無しさん:2014/02/24(月) 06:00:50.71
>>746-750
ありがとうございました
752デフォルトの名無しさん:2014/02/24(月) 10:31:55.27
私女だけど、python2.5のfloorの挙動について質問です。
例えば下記を実行すると、

import math
i = 4481.4*430
print i
print int(math.floor(i))



1927002.0
1927001

という風に、1の位が変わってしまいます。。。どうすればよいでしょう?
本当に困っているので助けてください><;
753デフォルトの名無しさん:2014/02/24(月) 11:39:37.92
>752
>>> 4481.4*430
1927001.9999999998
>>> math.floor(4481.4*430)
1927001

0.9999999998の差を許容できるなら、1も許してやれよ
0.0000000002の拘りは何の為に必要なんだ
754デフォルトの名無しさん:2014/02/24(月) 12:08:44.64
>>752
まず脱げ
755デフォルトの名無しさん:2014/02/24(月) 12:47:01.66
>752
科学技術の計算だったら
有効数字とか有効桁数とかでググれ
浮動小数点数の掛け算の後の
丸めかたについて定石がある
756デフォルトの名無しさん:2014/02/24(月) 12:52:33.03
>>752
まじれすすると

1927002.0 も
1927001 も

どちらも間違いです
757デフォルトの名無しさん:2014/02/24(月) 20:59:47.86
python難しいです><;
とりあえず、floatだとアレなんですね><;
decimal使って解決しました><;
758デフォルトの名無しさん:2014/02/24(月) 21:08:15.04
Decimalがあるとはいえ、まるで「使うな」とでも言うかのような使いにくさ
金融などのクリティカルな分野にはPythonは恐くて使えないねえ
759デフォルトの名無しさん:2014/02/24(月) 21:44:07.37
最近のフレームワークはどれがいいの?
Django、TurboGearなど
人気度、知名度ではDjangoだろうけど
ライブラリ代わりではTurboがいいだろうし
他に何かいいの出てきてない?
760デフォルトの名無しさん:2014/02/24(月) 21:46:02.35
そもそも金融、しかも金勘定に OSS って相当チャレンジャーだろ
うちだとまず無理だわ
761デフォルトの名無しさん:2014/02/24(月) 23:22:00.95
挑戦なき成功、存在せず
762デフォルトの名無しさん:2014/02/25(火) 00:01:59.35
COBOL!! COBOL!!
763デフォルトの名無しさん:2014/02/25(火) 02:51:07.40
プログラミング言語以前に計算機がどんな原理で動作してるのか理解してないんだろう
764デフォルトの名無しさん:2014/02/25(火) 05:39:40.29
知らなくてもプログラム書けるし
765デフォルトの名無しさん:2014/02/25(火) 07:01:21.84
こうやって原理を知らなくても何とかなると思ってるゴミが猫を電子レンジで乾かそうとするんだろうな
766デフォルトの名無しさん:2014/02/25(火) 07:06:11.34
>>765
すごいバカ
レジスタなんたらフォンノイマンなんたら知らなくてもプログラムできるし、
「そういう人は電子レンジで猫なんたら」
ってなんて馬鹿な飛躍。

きみ、専門学校出のおばかさん?
767デフォルトの名無しさん:2014/02/25(火) 07:17:51.65
>>766みたいに何一つ知らないのが一番幸せなんだろうな。
768デフォルトの名無しさん:2014/02/25(火) 07:18:49.02
>>765
君は言語空間の原理と実装の実際の区別がついていないおばかさんなんだよ

だから専門学校レベルか、三流大学ベルだね

例えばLispの関数carを
ドシロウト向けの嘘の解説として
「関数carはリストの一番目の要素を得る関数」
なんていう。

(car ’(1 2 3 )) → 1

しかし、、言語の原理から言うとそれは「S式操作上ではそう言える」だけであって、じつは
「関数carはCellのCAR部のポインターが指すものを示す関数」
となる。
プログラムリストとして表れるS式は
アトムまたはリストであるが、言語の原理としては実はリストなどそんざいせず、あくまでアトムと(コンス)セルがあるのみである云々云々。

そこまでで良いのであって、それ以上ポインターのフォンノイマン型コンピュータにおける実装の実際など知らなくてよろしい。

土方制御プログラムをアッセンブリー言語で組むのとは違うからな
769デフォルトの名無しさん:2014/02/25(火) 07:22:29.42
>>766
お前も中学生くらいになったら分かるよ。
お前が結局「知らなくてもプログラミングできる」の一点張りなこともな。

電子レンジの仕組みなんから知らなくても調理はできるからな。
770デフォルトの名無しさん:2014/02/25(火) 07:25:52.49
>>769
隠蔽もしらなそうだな
馬鹿丸出し

あ、パイソンスレか
じゃ、バカ多くてもしかたない
わはは
771デフォルトの名無しさん:2014/02/25(火) 07:27:09.07
>>768
内容は肯定も否定もしないけど、Python超初心者スレなので
例はlispじゃなくて超初心者向けのPythonで書いて欲しい……
772デフォルトの名無しさん:2014/02/25(火) 07:28:27.65
『Py厨はドカタの中の最底辺だから
標準レベルの知識を要求される場面に遭遇するこはない。
またドカタから脱出する機会めない。
よって計算機の仕組みを知る必要はない。』

これが一番説得力あるしケイサンキノシクミガーを論破できるだろ。
773デフォルトの名無しさん:2014/02/25(火) 07:30:42.28
>>759
トルネード!
774デフォルトの名無しさん:2014/02/25(火) 07:37:14.51
小学校の運動会のプログラムか?
775デフォルトの名無しさん:2014/02/25(火) 07:39:13.22
いや
トルネード(tornado)
776772:2014/02/25(火) 07:49:57.22
計算機の仕組みがどうのとほざいてたボンクラはどこいった?
ほら、反論してみろや。
777772:2014/02/25(火) 08:14:06.52
反論できないから逃げたのか?
778デフォルトの名無しさん:2014/02/25(火) 08:23:06.17
ほっとこう
Lisp使いには、Emacs・Vim使いと同様に
変な特権意識持ってる香具師がいるんで
初心者スレで暴れることが快感なんだろう
779デフォルトの名無しさん:2014/02/25(火) 08:24:02.03
フレックスもない底辺遠距離通勤ドカタだから出勤したんですよ
780デフォルトの名無しさん:2014/02/25(火) 09:07:45.23
一方pythonは毎日会社で椅子を並べて寝るデスマドカタのため通勤の必要がないのであった
781デフォルトの名無しさん:2014/02/25(火) 10:09:40.03
床で寝てる漏れは勝ち組
782デフォルトの名無しさん:2014/02/25(火) 10:43:46.03
>>776
おやおや知的大衆層まるだしの表現だな
低偏差値層の興奮は恥ずかしいぞ

わはは
ヴァカの相手するわけ無いだろ
一人で踊ってなさい
783デフォルトの名無しさん:2014/02/25(火) 11:09:56.85
負け犬の遠吠えにしか聞こえないけど
784デフォルトの名無しさん:2014/02/25(火) 13:41:38.44
何で急にレス伸びたのかと思ったら
案の定...
785デフォルトの名無しさん:2014/02/25(火) 15:32:04.97
言語を1つしか憶えられない低脳が
他の言語を嫌悪する*\(^o^)/*

それぞれ使い道があるでしょ
デスクトップアプリはJavaには不向きで
起動時に大量のクラス読み込むので遅くてイライラ、でもサーバアプリにすればずっと立ち上がってるし快適

何十年も運用するなら昔なら軍用のAda、今どきならHaskell?

Pythonは正直大規模開発やサーバには向かんと思う。

でもIPythonみたいに簡単にノート使えて小さなモジュール単位で結果みながら便利に使える自分の道具には最適*\(^o^)/**\(^o^)/*

Sage Mathとか色々な言語で作られた数字ツールをPythonでまとめた傑作だと思うよ
786デフォルトの名無しさん:2014/02/25(火) 16:07:04.58
Pythonで変数が設定されているか調べるにはどのようにすればいいですか?
PHPでいう、if(isset($var)){}のような事をしたいのですが
787デフォルトの名無しさん:2014/02/25(火) 16:41:02.22
>>786

if "value" in vars(): # @see also builtin-in locals(), globals(), hasattr()
 value = 0

のような事は出来るけど、このようなコードは、
静的検査で困る事が多いので、なるべく避けた方がいい。

value = None
if value is not None:
 ...

と未設定値としてNoneを利用するとか、関数のデフォルト引数を使って工夫したり、
状況によっては、辞書の利用の方が適切かもしれない。

本当に未定義な名前を参照する可能性がある状況なら、NameErrorを捕まえる。
例)
try: # for 2.x/3.x compatibility
 range = xrange
except NameError:
 pass
788デフォルトの名無しさん:2014/02/25(火) 16:50:00.58
has_attr()
789デフォルトの名無しさん:2014/02/25(火) 16:55:06.47
hasattr()は2つの引数必要とするじゃん
もう一個はどうするの?
790デフォルトの名無しさん:2014/02/25(火) 17:10:34.66
>>> a = 5
>>> b = 6
>>> hasattr(__import__('__main__'), 'a')
True
>>> hasattr(__import__('__main__'), 'b')
True
>>> hasattr(__import__('__main__'), 'c')
False
791デフォルトの名無しさん:2014/02/25(火) 17:13:29.23
>>789
同じような用途でよく使われるので、
参考に調べてみてはと思って書き流しただけ。

モジュール内のグローバル変数が想定だけど、
一応、import __main__ で、自分自身をモジュールとして参照できる。
用例) ./Lib/smtpd.py
792デフォルトの名無しさん:2014/02/25(火) 17:14:13.54
わろす
793デフォルトの名無しさん:2014/02/25(火) 17:37:15.14
笑いの沸点低いね
794デフォルトの名無しさん:2014/02/25(火) 21:41:15.31
ぺちぱー
795デフォルトの名無しさん:2014/02/26(水) 20:20:48.07
オススメのテンプレートエンジン教えて
Apacheとかと簡単に連携できて、レンダリングも簡単なのがいいんだけど
796デフォルトの名無しさん:2014/02/26(水) 21:44:57.00
Pythonやるとsublime text好きにできるからいいな
797デフォルトの名無しさん:2014/02/26(水) 21:47:37.44
>>795
pystache
テンプレートエンジンはApacheとは関係ないと思う
798デフォルトの名無しさん:2014/02/26(水) 22:14:32.90
jinja2じゃないの?
799デフォルトの名無しさん:2014/02/27(木) 00:22:35.54
tenjin
800デフォルトの名無しさん:2014/02/27(木) 00:58:57.55
tenjinは糞
801デフォルトの名無しさん:2014/02/27(木) 02:25:40.46
皆はサーバサイドでPython動かす時ってどうやってる?
自分で、Apacheとmod_wsgi使って書いてる?
それともDjangoなどフレームワークを利用してる?
802デフォルトの名無しさん:2014/02/27(木) 05:51:50.61
tempita
803デフォルトの名無しさん:2014/02/27(木) 07:24:50.79
temjinは俺の友達だ
俺に逆らうとおまえら
市ぬぞ
804デフォルトの名無しさん:2014/02/27(木) 07:53:03.14
本気出して作るなら今の定番構成は
Apache/nginx-gunicorn/uWSGI-flask+jinja2/django
でしょうね。
アプリケーションサーバーを切り離さないとスケールしにくいので。

個人的なものは手軽さが大事なので
・bottleのみ
・nginx-bottle+flup
で作ります。
手狭になったら最初の構成で書き直します。
805デフォルトの名無しさん:2014/02/27(木) 11:05:13.73
>>801
Apache/mod_wsgi/Python3
806デフォルトの名無しさん:2014/02/27(木) 13:21:48.42
nginxってよく見かけるんだけど何なの?
807デフォルトの名無しさん:2014/02/27(木) 13:45:31.50
りばーすぷろきしとえいちていていぴーさーばがいっしょになったもの
808デフォルトの名無しさん:2014/02/27(木) 14:43:48.67
ありがと
809デフォルトの名無しさん:2014/02/27(木) 20:47:03.49
乱数作る時って、Cでやるように、時間をseedに与えてから作るよな?
810デフォルトの名無しさん:2014/02/27(木) 21:32:18.44
>>809
randomモジュールでは、Randomインスタンスの初期化時に呼ばれてるので、
明示的にseedを設定する必要がある用途でなければ、自分でseedを呼ぶ必要はない。
811デフォルトの名無しさん:2014/02/28(金) 12:28:21.02
pyvenvで仮想環境作るとき、プロジェクトディレクトリに作るのっておかしいですか?
~/projects/hoge というディレクトリがあったとして
~/projects/hoge$ pyvenv pyvenv
とやってます。プロジェクトディレクトリ外に適当なディレクトリ作ったほうがいいんでしょうか?
たとえば
mkdir ~/pyvenv として
~/pyvenv$ pyvenv プロジェクト名
みたいな。
812デフォルトの名無しさん:2014/02/28(金) 17:34:02.57
>>811
virtualenvwrapper使ってると後者になるけど、
プロジェクト単位の環境構築では zc.buildout の併用が適してるかも。

プロジェクト下にvenv環境を構築すると、

* プロジェクトのバージョン管理
  環境を管理対象に含めないような設定をする事になると思うが、
  その部分はユーザの環境依存な設定になるので、レポジトリ公開する場合は好ましくない。
* プロジェクトを別環境でテストする (tox)
* 複数プロジェクトで同じ環境を使いたい

のような場面で、困ったり手間だったりする事があります。
813デフォルトの名無しさん:2014/02/28(金) 17:42:11.65
そのうちパイソンやるかな
おっぱい好きだし
814デフォルトの名無しさん:2014/02/28(金) 18:37:35.29
>>811
キチガイHOGE厨は早く消えろ
815デフォルトの名無しさん:2014/02/28(金) 22:27:53.43
>>811みたいなヴァカは本当にプログラムに向いてないな。
816デフォルトの名無しさん:2014/03/01(土) 10:10:27.73
PythonのModuleを読み込むパスが、/usr/lib/python2.6/site-packages/は通っているのですが、
/usr/lib64/python2.6/site-packages/は通っていません
これはsys.path.append('/usr/lib64/python2.6/site-packages/')をスクリプト内で毎回記述する方法以外はないのでしょうか?
/usr/lib64/python2.6/site-packages/内も読み込んでデフォルトで欲しいのですが、何か他の方法があれば教えていただけないでしょうか?
Pythonはデフォルトで入っていたか分かりませんが、yum install pythonは行いました
817デフォルトの名無しさん:2014/03/01(土) 10:16:26.90
ごめんなさい、勘違いでした
/usr/lib64/python2.6/site-packages/も読み込まれていました
818デフォルトの名無しさん:2014/03/01(土) 10:57:14.90
あとPYTHONPATHの設定方法も読んで理解しておきなさい
http://docs.python.jp/2.7/tutorial/modules.html
819デフォルトの名無しさん:2014/03/01(土) 20:02:13.35
>>812
ありがとうございます!
プロジェクトディレクトリに含めるのはやめることにしました。
820デフォルトの名無しさん:2014/03/02(日) 02:17:22.00
python3.3.1
tkinter8.5

Entryに英数の入力はできるのですが、日本語入力ができません。
何か方法ってあるんでしょうか?
821デフォルトの名無しさん:2014/03/02(日) 13:37:36.57
>>820
特に何も。最近は、普通に出来てる(win32,linux)けど、環境によって違ったりするのかな…

考えられる原因は、組み込まれてるTcl/Tkのバージョンが古いとか
822デフォルトの名無しさん:2014/03/02(日) 13:59:02.99
俺今大阪にいるんだけど、なんにも面白くない
京都は昔からクソだし
時間の無駄だ
家でプログラミングしてる方がずっとマシだ
823デフォルトの名無しさん:2014/03/02(日) 14:06:25.32
>>822
みさき公園で海見ながらプログラミングすると癒されるよ
824デフォルトの名無しさん:2014/03/02(日) 14:17:42.47
>>823
いいかも
825デフォルトの名無しさん:2014/03/02(日) 14:23:28.20
浜寺公園でもおk
南海に乗って出掛けるのおすすめ
826デフォルトの名無しさん:2014/03/02(日) 22:31:49.30
ぴちぴちビーチもいいぞ
827デフォルトの名無しさん:2014/03/02(日) 22:58:25.58
なんとなく昭和のセンスを感じる相性ですね
828デフォルトの名無しさん:2014/03/02(日) 23:59:13.93
python CGI Aでsubprocessモジュールを用いて別のCGI Bをコールしたいと考えています。
BはAで出力したcsvデータをreadしcsvとしてダウンロードさせるものです。
("Content-Type: application/download")
proc =subprocess.Popen("python ./download.cgi",shell = False).communicate()
上記のようなコードを書いたのですがcsvとしてダウンロードされません。
829デフォルトの名無しさん:2014/03/03(月) 00:01:29.93
試しに同様のコードのテストプログラムを書いたところ
標準出力の形で出力されたため、Bの読み込みはできているようです。
ただ、csv形式でダウンロードされないと意味がありません。
subprocess.Popenでcgiとしての動作をするよう呼び出すにはどうしたら良いのでしょうか。
普通にform actionでコールした場合はcsvで出力されます。
830デフォルトの名無しさん:2014/03/03(月) 00:20:48.67
pythonはviewvc以外では触ったことすらないから知らないけど
Aでファイルにcsvの中身出力してるなら
Bではhttpヘッダの後にそのファイルの中身読んで送ればいいんじゃねーの
831デフォルトの名無しさん:2014/03/03(月) 00:27:15.32
>>830
ご回答ありがとございます。
まさしく仰るとおりB側ではContent-Typeをapplication/downloadとして
ファイルを読み込みし、ダウンロードさせています。
BをCGI Aのform actionで呼び出した時はcsvのダウンロードが始まるのに
subprocessで呼び出した時はcsvダウンロードではなく標準出力?
での処理が始まっているようで困っています。
832デフォルトの名無しさん:2014/03/03(月) 03:11:41.74
>>831
サブ・プロセスのstdoutに出力されてしまってるからかな

* そのままstdoutに流してもいいなら Popen の引数に stdout=sys.stdout を追加。
* communicateの戻り値でcgiの出力するデータを受け取りたいなら stdout=subprocess,PIPE を指定
833デフォルトの名無しさん:2014/03/03(月) 11:43:39.54
>>831
別言語なのかなと思ったけど、よく読むと両方Python

わざわざ別プロセスにして呼び出さなくても、
両方から使う部分を関数にし、モジュールに纏めて、importして使おう。
834デフォルトの名無しさん:2014/03/03(月) 22:29:55.63
Pythonプログラムをエディタのginnieでつくろうと思っているのですが、
tkで作ったGUIプログラムの方はginnieのツールにPythonw.exeを登録して
ツールの実行で一発起動できるのですが、CUIのプログラムを同じように
python.exeで登録しても、一瞬起動するだけで、落ちてしまいます。
どうしたら、コマンドラインが実行しても落ちないようにできますか?

よろしくお願いいたします。
835デフォルトの名無しさん:2014/03/03(月) 22:47:44.88
落ちて?
コマンドプロンプトが開いて実行して終了してコマンドプロンプトが閉じてるだけじゃなくて?
836デフォルトの名無しさん:2014/03/03(月) 23:06:02.90
>>834
CUI用スクリプトにAny keyに準じた処理を書くとウインドウが閉じない
2.xでは
raw_input('Press enter to continue...')
3.xなら
input('Press enter to continue...')
837デフォルトの名無しさん:2014/03/04(火) 03:21:07.37
>>834
pythonのオプションに -i を付ける
(スクリプト実行した後にインタラクティブ・モードになってプロンプトが維持される)
838デフォルトの名無しさん:2014/03/04(火) 09:02:49.29
>>835->>837みなさんの言っている通りの状況です。

>>837そのやり方で試してみると、python立ち上げてウインドウが落ちない
のですが、-iのあとに-i%f%nなどとパラメータを設定すると落ちてしまいます。
どんなコードでも実行後、処理が終わってウィンドウが閉じないようにしたい
のですが、どうしたらよいですか?

それはginnieのツール設定でできることなのでしょうか?
839デフォルトの名無しさん:2014/03/04(火) 10:39:03.83
pythonの問題じゃなくね?ginnieの作者に聞けよ
840デフォルトの名無しさん:2014/03/04(火) 10:39:11.21
馬鹿には無理
841デフォルトの名無しさん:2014/03/04(火) 12:10:41.18
pause
842デフォルトの名無しさん:2014/03/04(火) 14:24:34.70
>>838
試してみた。パラメータの所に -i %f で出来たよ。

パス内のフォルダ名にスペースとか含まれてない?
ginnie側のコマンド呼び出しで、パス等が適切にエスケープされてない可能性がある。
843デフォルトの名無しさん:2014/03/04(火) 16:04:18.57
WindowsでPython3.3使ってます。
Cythonってのを使ってみたくて、MinGWとCythonのインストールはできたはずなんだけど
http://docs.cython.org/src/tutorial/cython_tutorial.html
ここの最初のhello worldで、
UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence
というエラーになってしまう。
どうしたら良いのでしょう?
844デフォルトの名無しさん:2014/03/04(火) 16:19:52.42
print u"Hello World".encode('utf8')
845デフォルトの名無しさん:2014/03/04(火) 16:46:35.41
>>843
エディタの文字コードと全角で Hello World 入力しちゃってないか確認
846デフォルトの名無しさん:2014/03/04(火) 16:53:05.45
テキストファイルの先頭にBOMがついてる
847デフォルトの名無しさん:2014/03/04(火) 17:08:52.91
>>842
>パラメータの所に -i %f で出来たよ。
試してみたら、見事出来ました!!

2ちゃんで聞いても、馬鹿にされるだけで、きちんと教えてくださる方は
少ないので、大変感謝しています。ぶっちゃけ、\1000位ならお金を
払ってでも教えてほしいと思ってたぐらいです。本当に有難うございます。

わざわざ試してくださったようで、本当にお手間を取らせました。
有難うございますm(_ _)m
848デフォルトの名無しさん:2014/03/04(火) 18:34:19.57
さあて、今日も気持ちよくバカにするかな

なんでも聞いていいよ!
柔しい俺
849847:2014/03/04(火) 21:57:07.02
>>848
お言葉に甘えて。

入出力をコマンドラインにした場合についてなのですが、
raw_input()で取得した文字列は、一体どういう状態で取得されているので
しょうか?

コマンドラインで使用している入出力がcp932なら取得した文字列もcp932に
なるのでしょうか?また、cp932とShift-JISやUTF-8とはどう違うのでしょうか?
私の環境では
#coding:Shift-JIS
としてファイルをShift-JISで保存し、
X=raw_input()
if X== "てすと":
print u"おっけ"

などとすれば上手く想定通りの動作をするのですが、
Shift-JISをUTF-8に全て書き換えて保存しても、同じことができません。
これはコマンドラインで使用している文字がShift-JISになっているということでしょうか?
どうも日本語の処理がいまいち理解できません。


長いですが、宜しくです。
850デフォルトの名無しさん:2014/03/04(火) 22:30:39.17
な、調子に乗るだろ?
851デフォルトの名無しさん:2014/03/04(火) 22:32:24.81
cp932の文字列などというものは存在しない
それどころかshift_jisもutf_8も存在しない

エンコーディングはstrをどう解釈するかの指定子だから
raw_inputで得られる物は単なるstr
852デフォルトの名無しさん:2014/03/04(火) 22:34:15.52
>>849
raw_input()は実行環境に依存する
"てすと"は#coding:Shift-JISに依存する

でも、Python3使えば文字コードに悩まされることないよ
853デフォルトの名無しさん:2014/03/04(火) 22:36:52.82
マジか?
何で?
854デフォルトの名無しさん:2014/03/04(火) 22:42:14.34
>>851
それは違う

ターミナルの文字コードが CP932 なら raw_input() して読みとったバイト文字列も
CP932 でエンコードされている。print repr(raw_input()) とかすればわかる
855デフォルトの名無しさん:2014/03/04(火) 22:45:09.89
また#coding:はソースコードのencodingをインタプリタに伝えるだけの役割
ソースコードのエンコーディングが変化すれば極当たり前にstrリテラルも変化するが
それは#coding指定子がやってることではない
856デフォルトの名無しさん:2014/03/04(火) 22:47:08.86
>>853
input()の返り値も"テスト"も特定の文字コードに依存しないから
857デフォルトの名無しさん:2014/03/04(火) 22:58:12.03
>>854
その「エンコードされて」どうなってるのか言わない物言いはわざと?
正確にはcp932でエンコードされたunicodeね。
Pythonで文字列の話をする時はstrなのかunicodeなのかはっきり喋ってね。
858デフォルトの名無しさん:2014/03/04(火) 23:58:05.25
>>857
CP932 でエンコードされているって書いてあるじゃん
str と unicode の区別も「バイト文字列」と書くことで区別つけたつもりだけど
859デフォルトの名無しさん:2014/03/05(水) 03:32:10.79
860デフォルトの名無しさん:2014/03/05(水) 10:43:17.00
>>859
最悪の回答だそれ
861デフォルトの名無しさん:2014/03/05(水) 11:55:52.14
てか初心者にPython2勧めるバカがこの手の質問引き受けろよ
862デフォルトの名無しさん:2014/03/05(水) 12:24:55.12
class Base:
class Meta:
hoge = true

class Custom( Base):
class Meta:
foo = false

こうするとBaseクラス内のMetaクラスのhogeをCustomでは引き継げないようです。継承したクラス内のクラスを継承する方法はないでしょうか?
863デフォルトの名無しさん:2014/03/05(水) 13:44:30.00
当たり前だろ
参考書でも買ってきて読めよ
普通にやり方書いてるだろ
864デフォルトの名無しさん:2014/03/05(水) 13:49:49.48
Flask Web Development: Developing Web Applications With Python


http://www.amazon.co.jp/gp/aw/d/1449372627/


これが日本で発売されるのはいつになるのだろう?
865デフォルトの名無しさん:2014/03/05(水) 13:52:32.62
英語で十分です
866デフォルトの名無しさん:2014/03/05(水) 13:53:14.95
最近のオラの翻訳速度だと2年
867デフォルトの名無しさん:2014/03/05(水) 14:35:04.02
>>862
突っ込みどころが多すぎてどう答えようか迷うけど、敢えて言うとしたら
>class Custom( Base):
の(の後のスペースは無くした方がいい
868デフォルトの名無しさん:2014/03/05(水) 22:01:24.19
pathlibよく見るとUNCパス使えるようになってんじゃん
すげえな
100%使わないけどw
869デフォルトの名無しさん:2014/03/05(水) 22:05:10.86
pathlibよく見るとglobで**が使えるようになってんじゃん
これ地味に欲しかったんだよね
870デフォルトの名無しさん:2014/03/05(水) 22:13:55.05
これでglobがエスケープできればパーフェクトなんだが
やはりそうは問屋が卸さなかった
しゃーない、ここだけは書き換えて使おう
871デフォルトの名無しさん:2014/03/06(木) 02:04:51.76
>>866
オライリーがPythonの本を日本で発売しないのは売れないからなの?
web関係の本なら需要があると思うんだけど。
872デフォルトの名無しさん:2014/03/06(木) 02:10:23.14
pythonに精通した翻訳家がいないんじゃね
873デフォルトの名無しさん:2014/03/06(木) 02:16:09.00
Ruby関係者による無言の圧力
874デフォルトの名無しさん:2014/03/06(木) 03:47:41.89
幾ら貰えるんだろうか?
翻訳してやってもいいけど
どうせPythonユーザは日本では少ないから印税が何%くるのか知らんが、殆どもらえないだろうな

俺が70か80位になった時には社会貢献のために色々と翻訳してやるよ
あと50年位後の話だがw
875デフォルトの名無しさん:2014/03/06(木) 04:28:29.58
専用の翻訳プロジェクト内で使えるように原文提供してくれるならともかく
自分で買った上にスキャンとか入力してまでは無理だわなあ
876デフォルトの名無しさん:2014/03/06(木) 06:10:19.86
書籍代の2〜3倍払えば翻訳してくれるようなサービスを誰かがやってくれたらいいのに。
一度翻訳してしまえば2軒目からの依頼はほぼ純利益。
需要はあると思う。

まあ、権利がらみで出版社からウダウダ言われる可能性もあるけど…。
877デフォルトの名無しさん:2014/03/06(木) 06:18:39.68
Flask 本は Blog の記事に加筆したものらしいからそっち見てみたら?
公式のチュートリアルで足りる気もするけど
878デフォルトの名無しさん:2014/03/06(木) 06:38:07.48
元の書籍の著作者から翻訳権の利用許可を得る必要があるな。
公開権や複製権、譲渡権も絡む。
個人レベルじゃ話にならないな。
879デフォルトの名無しさん:2014/03/06(木) 10:39:49.82
翻訳の改訂ならともかくゼロからだと大赤字だからな
純利益の前に死ぬな
880デフォルトの名無しさん:2014/03/06(木) 17:42:47.02
画像を連続表示する程度のGUIでもJavaで書いた方がPythonで書くより劇的に早くなったりすんの?
881デフォルトの名無しさん:2014/03/06(木) 18:20:33.78
GUIだって画像処理だってPurePythonとは限らんし、その問いかけに大した意味はねえな
ボトルネックを早い言語で書けば速くなる
882デフォルトの名無しさん:2014/03/06(木) 18:46:41.06
pypy使え
883デフォルトの名無しさん:2014/03/06(木) 19:21:54.08
俺が知らないだけで、Pythonの質問スレには>>862のような釣りのパターンがあるの?
884デフォルトの名無しさん:2014/03/06(木) 23:35:51.45
プログラミングしたことない友達にPythonやらせたいんで、
受けそうなソフト作りたいんだけど、どういうのがいいかね
スゲエ!自分も作りたい!って思うようなものを……
885デフォルトの名無しさん:2014/03/06(木) 23:43:59.44
>>884
tumblrからエロ画像をダウンロードするソフト
モジュールの導入にwebアクセスからスクレイピング、正規表現にローカルファイルの読み書きと満遍なくやれるよ
886デフォルトの名無しさん:2014/03/07(金) 00:03:34.10
そんなこと、強制するものじゃない
やりたい奴がやればいいのであって、ありがた迷惑だ
887デフォルトの名無しさん:2014/03/07(金) 00:17:02.47
すべての道はエロに通ずって
888デフォルトの名無しさん:2014/03/07(金) 00:18:05.80
886は884に
889デフォルトの名無しさん:2014/03/07(金) 00:21:56.06
エロエロえっ債務?
890デフォルトの名無しさん:2014/03/07(金) 00:24:35.72
エロエロエッサイム

エロいと思ってた
891デフォルトの名無しさん:2014/03/07(金) 00:27:07.30
Pythonを始めようと思うんですが、2を選んだものとして話を進めている
公式サイトの文章執筆時期が少し古いのが気になります。
確かに私のlinuxに入っているのも2なのですが
今から始めるにしてもやはり2なのですか?

ちなみに用途としては、自分用の細々とした用事を満たせる
簡単なプログラムを作るという程度のことで、あまり複雑なことはやらないつもりです。
892デフォルトの名無しさん:2014/03/07(金) 00:29:30.53
3にしろ
893デフォルトの名無しさん:2014/03/07(金) 00:30:31.39
そりゃ最初から入ってるものを使うのが一番手軽ですよ
用途が具体的でないので2でも3でも好きなほう使っていいです
894デフォルトの名無しさん:2014/03/07(金) 00:31:47.90
使いたいモジュールがまだ2しか対応してないとかなら2
そういうしばりが無いなら3じゃないか?
895デフォルトの名無しさん:2014/03/07(金) 00:36:16.39
4は?
896デフォルトの名無しさん:2014/03/07(金) 00:37:58.10
4でimport bracesが使えるようになる
897デフォルトの名無しさん:2014/03/07(金) 00:42:22.68
メジャーなフレームワークやモジュールはPython3対応されてる
もし、使おうとしてるものがそうでないなら、他のもの使った方がいいと思う
898デフォルトの名無しさん:2014/03/07(金) 00:55:21.27
分かりました、ではPython4を使ってみようと思います
899デフォルトの名無しさん:2014/03/07(金) 00:59:51.65
日本語とか気楽に使いたいなら3だとおもう。
既存のコードの書き直しを考えずに、
頭切り替えて新しいスクリプトは [2/3] で書こう、ということだけなら
移行はそれほど大変ではないと思うので、あまり気にしなくてもいいかもしれないけれど
900デフォルトの名無しさん:2014/03/07(金) 08:18:25.39
いやここはperl6で
901デフォルトの名無しさん:2014/03/07(金) 09:45:55.95
団子がいい
902デフォルトの名無しさん:2014/03/07(金) 10:38:04.95
pip
easy_install
Distribute
setuptools

の違いや、使い分けがよくわからんです
ド初心者にわかるように教えてくり
903デフォルトの名無しさん:2014/03/07(金) 10:54:17.21
pip→Python Packaging Authorityが公式にお勧めしてるパッケージ管理システム
easy_install←古いやつ
Distribute←古いやつ
setuptools←pip内でつかってる

http://pip.readthedocs.org/en/latest/
904デフォルトの名無しさん:2014/03/07(金) 10:58:07.94
easy_install は setuptools を使いやすくしたラッパー
pip は Distribute や easy_install ( や setuptools ) を駆使したアンインストーラ付きのラッパー

間違ってたらスマソ
905903:2014/03/07(金) 11:34:00.62
補足すると使い分けとかしなくていい
pipとvirtualenvだけで、個別の環境構築できる
個別の実行環境つくらなくていいならvirtualenvすらいらん
1.pip入れる
2.pipコマンドでvirtualenv入れる
3.virtualenvコマンドで個別の実行環境なり、パッケージ環境を作る
4.sourceコマンドで3の環境を立ちあげ
906デフォルトの名無しさん:2014/03/07(金) 13:08:50.88
2.7と3.3を両方インストールしてvirtualenvする場合は
2.7と3.3のどちらを先にインストールするのが良いですか?
あとvirtualenvをpipするのは2.7と3.3それぞれで必要ですか?
どっちで実行すればいいですか?
unix/windowそれぞれの場合についてお答えください
907デフォルトの名無しさん:2014/03/07(金) 13:49:41.63
うるさい、まず自分で試せ
908デフォルトの名無しさん:2014/03/07(金) 15:02:32.48
なんだお答えくださいって
義務かよ
909デフォルトの名無しさん:2014/03/07(金) 15:08:44.28
まず国語を勉強したほうが良さそうだなw
910デフォルトの名無しさん:2014/03/07(金) 19:25:06.91
まあ国語は別途勉強していただくとして
windowsは2.7を入れてから3.3を入れる
unixはどっちでもいい
virtualenvをpip installするのはバージョンごとに必要
pipを入れるのもバージョンごとに必要
911デフォルトの名無しさん:2014/03/07(金) 21:46:43.22
>>910
>virtualenvをpip installするのはバージョンごとに必要
>pipを入れるのもバージョンごとに必要
片方だけでいいよ
912911:2014/03/07(金) 21:49:42.79
pipの方は正確に言うと明示的に入れるのは片方だけで、virtualenvで環境作る時に勝手にいれてくれる
913デフォルトの名無しさん:2014/03/07(金) 21:52:59.27
最近の質問はPHPスレを遥かに下回る低レベルさ
とんでもないど素人たちがPythonに流れ込んでるのかな?
こりゃPythonやってる奴らは一番馬鹿にされそうな気がしてきた
914911:2014/03/07(金) 21:57:01.81
>>913
プログラミングを学ぶ最初の方の言語にPythonを選択する人が増えてきたっていうことなんじゃいかな
915デフォルトの名無しさん:2014/03/07(金) 21:57:35.67
名前残ったまんまだった。特に意味無いからきにしないでください
916デフォルトの名無しさん:2014/03/07(金) 22:05:04.88
>>913
気のせい
ここは元から(超)初心者さんが質問しに来るスレ
917デフォルトの名無しさん:2014/03/07(金) 22:07:12.04
くだ質スレなんだから、別にくだらなくてもいいじゃない
自分はPythonでプログラミング始めたけど、くだらない質問してたし助けられたよ
手当たり次第ググってプログラミングするよりかはましだと思う
918デフォルトの名無しさん:2014/03/07(金) 22:24:01.28
超初心者用と名の付くスレで初心者を見下すようなレスってどうなんだろう。普及して欲しくないとでも思っているのだろうか?だとすれば利用者人口を増やそうと貢献してくれている人たちが可愛そうだ。
919デフォルトの名無しさん:2014/03/07(金) 22:26:07.41
ちょっとわかるようになると初心者馬鹿にするあれだろ
超初心者用なのに文句言ってる奴は
920デフォルトの名無しさん:2014/03/07(金) 22:31:04.73
初心者だからって、バカが許されるわけじゃないでしょ
まずやる事やれってこと
921デフォルトの名無しさん:2014/03/07(金) 22:35:20.96
>>920
それなら馬鹿にするんじゃなくて、その
>やる事
を教えてあげればいいじゃない
922デフォルトの名無しさん:2014/03/07(金) 22:38:10.70
最近「プログラミング始めるにはPythonが最適!」みたいな話が増えてるからね
池沼みたいな質問が増えてくるよ
初心者がPython触るのは本当鬱陶しいからやめてほしいね
923デフォルトの名無しさん:2014/03/07(金) 22:50:38.92
裾野は広げた方が良いと思います。
ですので初心者の方がPython触るのは歓迎です。

Pythonの初心者嫌いの>>922さんがここに来る理由が分かりません。
>>922さんは初心者の方の質問を無視すれば良いだけなのでは?

>>922さんは会社でも不満や否定形の話ばかりする方と思います。
相手の欠点・至らぬ点をあげつらう事に喜びを感じるのでは?
924デフォルトの名無しさん:2014/03/07(金) 22:50:50.97
初心者に冷たくしないでみんなで助け合ってPythonを広めよう
人にアドバイスしてこそ心が清くなりスキルも上がるというもの
それは君の人生にとって大いなるプラスとなるだろう
925デフォルトの名無しさん:2014/03/07(金) 22:57:10.94
>>920
そう、俺はそれを言いたいんだよ、自分たちで質問してるのにまるで自分たちではないように振る舞って書き込んでいる質問者たち!
ググるより聞いたほうが早い?
馬鹿か
PHPerですら自分達で考え、四苦八苦した上で質問してる人が多いのに、ここは自分で試すの、検索するの面倒くさいから聞こうっていう性根の腐った奴らが多い
javaScript系のスレにもこういう馬鹿が出没するんだけどな
926デフォルトの名無しさん:2014/03/07(金) 22:57:22.00
Pythonスレに限らずゆとりが馬鹿な質問しても優しく丁寧に答えてもらえるみたいに思ってたらそれは間違いだが
927デフォルトの名無しさん:2014/03/07(金) 22:57:25.76
情けは人のためならずやで
928デフォルトの名無しさん:2014/03/07(金) 23:01:08.64
それじゃあ、もうこのスレッドはいらないね
929デフォルトの名無しさん:2014/03/07(金) 23:01:53.59
そうだね
次スレは立てないように
930デフォルトの名無しさん:2014/03/07(金) 23:02:30.90
>>923
俺は>>922じゃないが、ゆとり的な思想が好かんのよ
あ、Pythonって今まで極めてマイナーだったからPython使ってる人間の多くはゆとり世代か...
日本でのちょっと先が思いやられるな
PHP以下の評価受けそうだ

Pythonに初心者が来るのはいいんだが、ここ最近の質問の質の低さはひどすぎる
931デフォルトの名無しさん:2014/03/07(金) 23:04:36.40
>>925
くだ質スレ質問する時なんて、ググって得られた情報が正しいか判断できないでしょ
わからん→ググる→動いた→やったぜ
これのほうがまずいでしょ
932デフォルトの名無しさん:2014/03/07(金) 23:04:52.06
2.4 以前ならともかく今まで極めてマイナーだったとか言われると当惑しちゃう
933デフォルトの名無しさん:2014/03/07(金) 23:07:18.31
>>931
それなら、「ググってこうやって動いたけど、これで合ってますか?」って質問すればいいだろうが
934デフォルトの名無しさん:2014/03/07(金) 23:09:21.06
納得
935デフォルトの名無しさん:2014/03/07(金) 23:12:34.89
>>913
ESRに釣られたアホが真っ先に弄るからな
936デフォルトの名無しさん:2014/03/07(金) 23:13:08.73
>>わからん→ググる→動いた→やったぜ

コレでいいと思う
自分で調べて確かめてみるって事が大事だし、それが勉強ってもんだ
そうやっていって自信付けていけばいいし、みんなそうやってきた

考えもせずに安易に答えだけ聞いても勉強にならないよ
937デフォルトの名無しさん:2014/03/07(金) 23:13:26.64
よし、オナニーでもしよう
938デフォルトの名無しさん:2014/03/07(金) 23:15:31.23
ESRって何の略?
コンデンサとかしか出てこなかったけど...
939デフォルトの名無しさん:2014/03/07(金) 23:16:07.39
>>933
>わからん→ググる→動いた→やったぜ
のあとに、わざわざ2chで質問する人は限られてる

>>936
それがPHPの悲劇
脆弱性含みまくりのチュートリアルが拡散されてるよ、今も。
940デフォルトの名無しさん:2014/03/07(金) 23:16:58.24
>>939
流石にセキュリティの入門書ぐらい読むだろ
941デフォルトの名無しさん:2014/03/07(金) 23:19:53.30
>>939
PHPはセキュリティ対策の本も出ているし、Web情報もある
よっぽどの馬鹿じゃない限りそんなのを素のまま使わない
ましては企業で
942デフォルトの名無しさん:2014/03/07(金) 23:20:45.36
>>941
普通にJava使うよ
943デフォルトの名無しさん:2014/03/07(金) 23:24:01.01
WebサイトでわざわざJava使う馬鹿は頭がおかしい
銀行系とかならわかるが
944デフォルトの名無しさん:2014/03/07(金) 23:28:00.02
JSPが安定して一番はやいよ
945デフォルトの名無しさん:2014/03/07(金) 23:39:16.82
それは分かるけど、めんどいじゃん
俺Java嫌い
俺の中ではCより面倒くさい

楽さで言えば絶対にPHPだな
俺はセキュリティ対策なんか今までの経験で全部ライブラリ化してるから実装はすぐ
946デフォルトの名無しさん:2014/03/07(金) 23:53:43.19
本で学習→疑問→ググる→英語圏のページ→2chで質問→ドキュメント読め→理解出来ずに聞く→罵られる→未解決→最初に戻る

数回のループ後、Rubyへ。
947デフォルトの名無しさん:2014/03/07(金) 23:57:22.20
馬鹿は振るい落とさないとPython使いのレベルが下がっていくからな
948デフォルトの名無しさん:2014/03/07(金) 23:57:25.51
ワラタw

でも案外そっちの方がそいつにとっても良いのかもよ
949デフォルトの名無しさん:2014/03/07(金) 23:58:46.19
>>948>>946
Rubyの方が日本じゃシッカリしてるから
950デフォルトの名無しさん:2014/03/08(土) 00:16:48.60
フレームワークのValidationやSecurityの項目も見ないニートの溜まり場
951デフォルトの名無しさん:2014/03/08(土) 00:29:32.14
なんもかんもフレームワークと言ってるお前は初心者
PHPer達ですら、フレームワークから独立しているのに
フレームワークを使うのは弊害もあるってことだ
952デフォルトの名無しさん:2014/03/08(土) 00:37:28.24
>>951
涙ふけよカスニート(プ
953デフォルトの名無しさん:2014/03/08(土) 00:41:10.99
やれやれ、ゆとりはこれだから困る
954デフォルトの名無しさん:2014/03/08(土) 00:42:12.08
Python = ゆとり言語の日も近いな
955デフォルトの名無しさん:2014/03/08(土) 00:46:26.95
もう既にそうなっていると思うぞ
先行きは暗いかも
956デフォルトの名無しさん:2014/03/08(土) 00:47:02.08
最初から教育目的で作られた言語だろ
957デフォルトの名無しさん:2014/03/08(土) 00:49:28.54
もういちいちツッコむのも面倒くさいよ・・・
958デフォルトの名無しさん:2014/03/08(土) 00:50:30.31
>>951
その弊害を答えられないとニート決定だね!
959デフォルトの名無しさん:2014/03/08(土) 00:51:44.60
>>958
何コイツ?
マジで面倒くせぇ
960デフォルトの名無しさん:2014/03/08(土) 00:52:06.06
>>959
涙ふけよカス
961デフォルトの名無しさん:2014/03/08(土) 00:52:48.72
これが俗に言われる、ゆとりである
962デフォルトの名無しさん:2014/03/08(土) 00:53:18.71
>>959
馬鹿っぽいね
963デフォルトの名無しさん:2014/03/08(土) 00:53:57.32
>>961
凄く馬鹿っぽいね
964デフォルトの名無しさん:2014/03/08(土) 00:54:00.65
高齢ニートの集まり?人生詰んだね!首でもつれば?
965デフォルトの名無しさん:2014/03/08(土) 00:56:56.04
966デフォルトの名無しさん:2014/03/08(土) 01:02:38.07
>>956
クリスマス休暇の暇つぶしが目的だったと書いてあった。
967デフォルトの名無しさん:2014/03/08(土) 02:32:06.13
>PHPerですら自分達で考え、四苦八苦した上で質問してる人が多い

だうと
968デフォルトの名無しさん:2014/03/08(土) 07:48:58.01
自分は古いBASICとCOBOLしか使えないオサーンでしたが
Pythonはこれらの言語が持つ懐かしい香りがするため使えてます
C系構文にアレルギーがある人にオススメの言語です
969デフォルトの名無しさん:2014/03/08(土) 08:37:46.39
???「Pの付く言語は糞ですよ」
970デフォルトの名無しさん:2014/03/08(土) 09:02:56.43
http://ideone.com/4ynloD

Twitterからタイムラインを読み取ってターミナルに表示し、
ついでにツイート内のリンク先が画像なら保存して表示するというスクリプトを書いたのですが、スレッドを使うと何故か凄まじい数のエラーが出てしまいます。
これは何が原因なのでしょうか?どうも何か根本的な間違いを犯している気がします

あとTwitter特有の短縮リンクのせいで一々リンク先に飛ばないと確認できない糞仕様ですがこの際そこはどうでもいいです、後でGUIアプリに作り直します
971デフォルトの名無しさん:2014/03/08(土) 09:09:05.67
ソースコード貼ったのは評価してやるよ
でも根本的にエラーを張らない時点で0点だな
テストで名前を書いてないに等しい
972デフォルトの名無しさん:2014/03/08(土) 09:11:42.42
ちなみに原因はよくある奴で
「GUIを操作していいのはGUIを作ったスレッドだけ」
を犯しているものと思われる
読まなくてもそのくらいは想像がつく
973デフォルトの名無しさん:2014/03/08(土) 09:16:48.77
>>971
文字数制限に引っかかっちゃいました
2014-03-08 09:12:40.749 Python[4368:2d17] *** Assertion failure in +[NSUndoManager _endTopLevelGroupings], /SourceCache/Foundation/Foundation-1056/Misc.subproj/NSUndoManager.m:328
An uncaught exception was raised
+[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.

こういうのが延々と羅列されています
Exceptionがcaughtされてないということしか理解できません
974デフォルトの名無しさん:2014/03/08(土) 09:23:45.15
インターネットしてたら出てきた職探しの広告のキャッチフレーズ

>スキル・キャリアを最大限に生かせる
>JAVA・PHPエンジニアの派遣

スキル・キャリアを最大限に生かして派遣かよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
975デフォルトの名無しさん:2014/03/08(土) 09:24:03.88
いやideoneとかpastebin使って貼ればいいんだろ。
実際ideone使えてるんだから少し考えようぜ。

で、原因書いてありますね。
>is only safe to invoke on the main thread.
>>972で確定。
976デフォルトの名無しさん:2014/03/08(土) 09:57:18.28
次スレです

仲良く使ってね

くだすれPython(超初心者用) その22
http://toro.2ch.net/test/read.cgi/tech/1394240091/
977デフォルトの名無しさん:2014/03/08(土) 10:08:29.89
>>970
>Twitter特有の短縮リンクのせいで一々リンク先に飛ばないと確認できない糞仕様

短縮リンクが糞なのは同意ですが
一々リンク先の件は http の HEAD リクエストを勉強してごらん
978デフォルトの名無しさん:2014/03/08(土) 10:13:09.42
>>973
>>972 の通りだけど thread 間の通信に queue を使うと良い
979デフォルトの名無しさん:2014/03/08(土) 11:03:54.07
>>975
>>977
>>978
皆さんありがとうございます!!!
理想的なものが出来ました!!!!
980デフォルトの名無しさん:2014/03/08(土) 11:04:00.00
>>976
乙っぱい
981デフォルトの名無しさん:2014/03/08(土) 11:54:48.15
>>979
どこをどう変えたら出来たとか書けば、更にいいんだがな
また同じような質問の際に"過去スレ読め"、とビシッと言えるから
982デフォルトの名無しさん:2014/03/08(土) 12:18:40.27
解決したんならいいんだけど、ちょっとコード読んでみた
俺が携帯から見てるからかもしれないけれど、読みにくいコードだな
983デフォルトの名無しさん:2014/03/08(土) 15:51:46.55
>>974
トンズラしつつ汎用的な技術が身につく。
ギリギリまで踏ん張って、地元にかえれれば儲けもの。
984デフォルトの名無しさん:2014/03/08(土) 19:46:41.52
python2.7でimport csvをしてファイルの読み書きをしているのですが、
保存したcsvファイルの特定の部分だけを編集して保存するんにはどうしたら
よいですか?

よろしくお願いいたします。
985デフォルトの名無しさん:2014/03/08(土) 19:59:14.69
再度読み込んで編集すればいいような
986デフォルトの名無しさん:2014/03/08(土) 20:10:59.76
>>984
vi /path/to/csvfile.csv
987デフォルトの名無しさん:2014/03/08(土) 20:56:59.04
「たのしいプログラミング Pythonではじめよう」って本買った人います?
Pythonでのクラスの作り方・使い方やGUI関係のアプリの作り方を
一から学べるなら買いたいんですけど、その辺どうですかね
子供向けの連載を本にしたという情報があってちょいと不安です
988デフォルトの名無しさん:2014/03/08(土) 21:29:06.32
原著の方ざっと見ただけだけど後半のゲーム作りでクラスやGUIのTkinterガンガン使ってたし
サンプルコードたくさん載ってたしいいんじゃないの
子供向けだから特にどうってこともないと思う
989デフォルトの名無しさん:2014/03/08(土) 21:29:35.57
子供よりできない可能性もあるしな
この世界は
990デフォルトの名無しさん:2014/03/08(土) 21:33:40.29
選民思想
991デフォルトの名無しさん:2014/03/08(土) 22:58:02.77
>>984
もし、既にあるファイルの特定の部分のみのデータ書き換え(ファイルへの書き込み処理が発生する)ような事を意図しての質問だったら、
CSVは、適してません。CSVでは通常、可変長なレコードのシーケンシャルなアクセスになるので、
一部を編集するといった場合でもファイル全体を新たに書き出す事になります。

レコードの一部のみをピン・ポイントで書き換えたいといった場合、
ファイル・フォーマットは、固定長のレコードで設計し、seekを使ってランダム・アクセスします。
992デフォルトの名無しさん:2014/03/09(日) 01:23:57.10
>>988
ありがたい
早速買います
993デフォルトの名無しさん:2014/03/09(日) 13:11:48.55
現在プログラム板のID制導入の投票を実施中です
よろしくお願いします

プログラム板 強制ID制導入に関する投票スレ
http://kohada.2ch.net/test/read.cgi/vote/1394290844/
994デフォルトの名無しさん:2014/03/09(日) 13:41:32.11
うめ
995デフォルトの名無しさん:2014/03/09(日) 18:44:19.20
埋めるか
996デフォルトの名無しさん:2014/03/09(日) 18:46:01.62
996
997デフォルトの名無しさん:2014/03/09(日) 20:40:33.82
997
998デフォルトの名無しさん:2014/03/09(日) 21:56:31.98
raise ぬるぽ
999デフォルトの名無しさん:2014/03/09(日) 21:56:51.35
梅用酢
1000デフォルトの名無しさん:2014/03/09(日) 21:57:22.82
tkinter
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。