2016-11-17 8 views
0

皆さん! ファイルを.jsonファイルに変換するのに、Python 2.7xlrdを使用しています。このスクリプトでも達成したいことは、入力から結論を引き出すことです。これにより、人為的なエラーも少なくなります。しかし、私のコードに問題があります。ユーザーはセル内に一定の値を入力する必要があります。これは、hunderedごとのブックからのページを表します。私はチェックしたい:100以上のページがあるか?私が使用しているコードPython:変数が大きいか小さいかチェックif/else文

import sys 
import xlrd 

dir = '/path/to/JSON/to/write' 
dirworksheet = '/path/to/excel/file' 

file = sys.argv[1] 
fileJSON = sys.argv[1]+'.json' 

work_path = os.path.join(dirworksheet,file) 
full_path = os.path.join(dir,fileJSON) 
worksheet = xlrd.open_workbook(work_path) 
sheet_generalinfo = worksheet.sheet_by_index(0) 

data_generalinfo = [] 

for colnumber in range(1, sheet_generalinfo.ncols): 
    key1 = OrderedDict() 
    row_value = sheet_generalinfo.col_values(colnumber) 
    key1['publish_id'] = 1 
    key1['book_name'] = row_value[1] 
    key1['pages_per_100'] = float(row_value[2]) 
    if row_value[2]>= 1: 
     key1['greater_or_smaller']='greater' 
    else: 
     key1['greater_or_smaller']='smaller' 

    key1['samples'] = data_samples 

    data_generalinfo.append(key1) 

json = json.dumps(data_generalinfo) 

with open(full_path, 'w') as datafile: 
    datafile.write(json) 

print(full_path) 

コードは正常に動作します!しかし、私はJSONファイルを見ると、それは常に真実を言う!エクセルファイルにと入力しましたが、1.4ですが、常にgreaterが返されます。この声明で私は間違って何をしていますか?

+2

は、あなたが正しいものをテストすることを確認するために、あなたのコード内で値を出力します。 – Chr

+0

row_value [2]> = 100の代わりにrow_value [2]> = 1の場合はどうしますか? –

+0

値は100であるので、100ページ=> 1 –

答えて

3

潜在的にrow_value [2]はインポート時の文字列です。もしそうなら、それは数に文字列を比較しているため、それは常に、trueになります。

>>> '0.1'>1 
9: True 

は、フローティングポイントにすべてを変換してみてください。

key1['pages_per_100'] = float(row_value[2]) 

今、あなたは物事は、それをフロート作ったこと仕事が、あなたはあなたのif文を変更する必要があります:

for colnumber in range(1, sheet_generalinfo.ncols): 
    key1 = OrderedDict() 
    row_value = sheet_generalinfo.col_values(colnumber) 
    key1['publish_id'] = 1 
    key1['book_name'] = row_value[1] 
    key1['pages_per_100'] = float(row_value[2]) 
    if row_value[2]>= 1: 
     key1['greater_or_smaller']='greater' 
    else: 
     key1['greater_or_smaller']='smaller' 

あなたがkey1にfloat値をつけたが、その後、あなたの文は、まだ、まだ文字列である、row_valueを見た場合。行を変更します。

if row_value[2]>= 1: 

代わりに:

if key1['pages_per_100']>= 1: 
+0

ありがとうございました!しかし、これはまだ私の問題を解決しません。 "pages_per_100":0.2、 "greater_or_smaller": "greater" ' –

+0

コード内: row_value [2]> = 1の場合: を に変更する必要があるkey1 [ 'pages_per_100']> = 1 あなたがfloatに変換したものです –

+0

あなたのコメントが理解できませんか? –

関連する問題