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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

18103閲覧

pythonにおけるif文のSyntaxError: invalid syntaxについて

jiro260260

総合スコア25

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

1クリップ

投稿2016/09/20 04:43

編集2016/09/20 05:07

###前提・実現したいこと
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/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

attakei

2016/09/20 04:49

コードの部分はバックスラッシュ3個(```)で囲むか編集時に選択して「</>」を押してコードであることがわかるようにしてください(編集時の右サイドがプレビューになっているので、確認すると良いです) 特にPythonのようにインデントが重要な言語のコードブロックがわからないと、書かれているコードがどういう文法・意図で書かれているかが分かりづらくなり、回答がつきにくくなります
jiro260260

2016/09/20 04:52

ご指摘いただき、ありがとうございます。修正いたしました。よろしくお願い申し上げます。
guest

回答1

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]) ) # <-- ない!

分かりやすく書き換えてみるとこんな感じです。

また、[~~] % (~~) といった書き方はできないので、

python

1[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])]

などのような形に変えないと多分動かないと思います。

投稿2016/09/20 05:00

attakei

総合スコア2738

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

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

jiro260260

2016/09/20 05:14

ありがとうございます!無事にエラーを解決出来ました。ご教示いただきありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問