pythonにおけるif文のSyntaxError: invalid syntaxについて
- 評価
- クリップ 1
- VIEW 14K+
前提・実現したいこと
pythonで銘柄コードファイル(txt)を読み込み、impalaから各銘柄の株価データを得て、それをcsvファイルに書き込むということをしたいです。
発生している問題・エラーメッセージ
得られた株価データを銘柄ごとにcsvファイルに書き込む段階で、if文でSyntaxError: invalid syntaxが生じるのですが、原因が不明です。
エラーメッセージ
if id == '9007': #リストに入れた結果をcsvファイルに書き込んでいく
File "<stdin>", line 14
if id == '9007': #リストに入れた結果をcsvファイルに書き込んでいく
^
SyntaxError: invalid syntax
>>> csvWriter1.writerow(listData)
File "<stdin>", line 1
csvWriter1.writerow(listData)
^
IndentationError: unexpected indent
>>> elif id == '9008':
File "<stdin>", line 1
elif id == '9008':
^
IndentationError: unexpected indent
>>> csvWriter2.writerow(listData)
File "<stdin>", line 1
csvWriter2.writerow(listData)
^
IndentationError: unexpected indent
>>> elif id == '9020':
File "<stdin>", line 1
elif id == '9020':
^
IndentationError: unexpected indent
>>> csvWriter3.writerow(listData)
File "<stdin>", line 1
csvWriter3.writerow(listData)
^
IndentationError: unexpected indent
>>> elif id == '9021':
File "<stdin>", line 1
elif id == '9021':
^
IndentationError: unexpected indent
>>> csvWriter4.writerow(listData)
File "<stdin>", line 1
csvWriter4.writerow(listData)
^
IndentationError: unexpected indent
>>> elif id == '9042':
File "<stdin>", line 1
elif id == '9042':
^
IndentationError: unexpected indent
>>> csvWriter5.writerow(listData)
File "<stdin>", line 1
csvWriter5.writerow(listData)
^
IndentationError: unexpected indent
>>> cur.fetchall() #全ての結果を返すexit()
File "<stdin>", line 1
cur.fetchall() #全ての結果を返すexit()
^
IndentationError: unexpected indent
該当のソースコード
pythonです。
import csv
f = open('/home/user/bootcamp/StockCode.txt') #銘柄コードファイルを開く
lines2 = f.readlines() # 1行毎にファイル終端まで全て読む(改行文字も含まれる)
f.close()
# lines2: リスト。要素は1行の文字列データ
f1 = open('/home/user/bootcamp/data9007.csv', 'ab') #9007のデータを書き込むファイルを開く
csvWriter1 = csv.writer(f1)
f2 = open('/home/user/bootcamp/data9008.csv', 'ab') #9008のデータを書き込むファイルを開く
csvWriter2 = csv.writer(f2)
f3 = open('/home/user/bootcamp/data9020.csv', 'ab') #9020のデータを書き込むファイルを開く
csvWriter3 = csv.writer(f3)
f4 = open('/home/user/bootcamp/data9021.csv', 'ab') #9021のデータを書き込むファイルを開く
csvWriter4 = csv.writer(f4)
f5 = open('/home/user/bootcamp/data9042.csv', 'ab') #9042のデータを書き込むファイルを開く
csvWriter5 = csv.writer(f5)
titleData = ['stock_code', 'date_s', 'openning', 'high', 'low', 'closing', 'turnover', 'closing_adjusted', 'code_id'] #各ファイルに値のタイトルを入れる
csvWriter1.writerow(titleData)
csvWriter2.writerow(titleData)
csvWriter3.writerow(titleData)
csvWriter4.writerow(titleData)
csvWriter5.writerow(titleData)
for line in lines2: #銘柄コードを順次読み込む
id = line.strip()
from impala.dbapi import connect
conn = connect(host='172.16.102.6', port=21050) #接続
cur = conn.cursor()
cur.execute('use tse_d_yf') #テーブルの選択
for num in range(0,3):
listData = [] #リストの初期化
date = 20150403 - num
sql = 'SELECT * from sec1 where code_id = \'%s\' AND date_s = \'%s\' ' % (id, str(date))
cur.execute(sql) #select
result = cur.fetchall() #結果を配列化
listData.append(['%s', '%s', '%d', '%d', '%d', '%d', '%f', '%d', '%s'] % (result[0][0], result[0][1], result[0][2], result[0][3], result[0][4], result[0][5], result[0][6], result[0][7], result[0][8]) #リストにデータを追加
if id == '9007': #リストに入れた結果をcsvファイルに書き込んでいく
csvWriter1.writerow(listData)
elif id == '9008':
csvWriter2.writerow(listData)
elif id == '9020':
csvWriter3.writerow(listData)
elif id == '9021':
csvWriter4.writerow(listData)
elif id == '9042':
csvWriter5.writerow(listData)
cur.fetchall() #全ての結果を返すexit()
試したこと
コロンの全角or半角を確認したり、条件文の両辺の型をintにしたりstringにしたりしてみましたが、いずれも結果は変わりませんでした。
補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
気になったの点をあげると、その行よりもその1個上がなんか変ですね。
listData.append(['%s', '%s', '%d', '%d', '%d', '%d', '%f', '%d', '%s'] % (result[0][0], result[0][1], result[0][2], result[0][3], result[0][4], result[0][5], result[0][6], result[0][7], result[0][8]) #リストにデータを追加
行末の閉じカッコが本来append()
の分も必要なのに、足りていないです。
listData.append(
['%s', '%s', '%d', '%d', '%d', '%d', '%f', '%d', '%s']
%
(result[0][0], result[0][1], result[0][2], result[0][3], result[0][4], result[0][5], result[0][6], result[0][7], result[0][8])
) # <-- ない!
分かりやすく書き換えてみるとこんな感じです。
また、[~~] % (~~)
といった書き方はできないので、
[str(result[0][0]), str(result[0][1]), int(result[0][2]), int(result[0][3]), int(result[0][4]), int(result[0][5]), float(result[0][6]), int(result[0][7]), str(result[0][8])]
などのような形に変えないと多分動かないと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
attakei
2016/09/20 13:49
コードの部分はバックスラッシュ3個(```)で囲むか編集時に選択して「</>」を押してコードであることがわかるようにしてください(編集時の右サイドがプレビューになっているので、確認すると良いです)
特にPythonのようにインデントが重要な言語のコードブロックがわからないと、書かれているコードがどういう文法・意図で書かれているかが分かりづらくなり、回答がつきにくくなります
jiro260260
2016/09/20 13:52
ご指摘いただき、ありがとうございます。修正いたしました。よろしくお願い申し上げます。