2017-09-27 9 views
0

os.path.joinとWindowsシステムに問題があります。構造化されていないJSONデータを含むファイルを再帰的に読み込み、 "converted_json"という名前のディレクトリを作成し、構造化形式の各非構造化JSONファイルの内容を "converted_json"ディレクトリ内の新しいファイルに出力するスクリプトを作成しました。os.path.join issue Windows

以下のスクリプトをmacOSでテストしたところ、実行時に構造化JSONデータが新しいファイルに出力され、新しいファイルが "converted_json"ディレクトリに出力されました。しかし、Windowsシステムでスクリプトを実行すると、JSONデータが新しいファイルに出力されますが、ファイルは "converted_json"ディレクトリに出力されません。基本的に

、次os.path.joi n個のコードは次のセクションでは、Windows上で動作しているように表示されません。しかし、彼らが指定されている「converted_json」ディレクトリ内に格納されていない、ファイルが作成されます

conv_json = open(os.path.join(converted_dir, str(file_name[-1]) + '_converted'), 'wb') 

converted_dir変数で指定します。

オープンファイル 'C:\ Users \ユーザーテスト\デスクトップ\テスト\ file_name.json.gz.json_converted'、モード 'WB' 0x0000000002617930をで

次の出力が "conv_json" 変数を印刷するからです上記から分かるように

、変数「converted_json」ディレクトリが含まれていません「conv_json」内に含まれるファイルパス(それはos.path.joinとconverted_dir変数を使用してそこからあるべきである。

任意構造化されたデータを "converted_json"に出力する方法に関する支援"ディレクトリは非常に高く評価されるだろう。

以下のコード:

file_name = str.split(file.name, '/') 

'/' で分割が全く分割しないでしょう。

argparser = argparse.ArgumentParser() 
argparser.add_argument('-d', '--d', dest='dir_path', type=str, default=None, required=True, help='Directory path to Archive/JSON files') 
args = argparser.parse_args() 
dir_path = args.dir_path 


converted_dir = os.path.join(dir_path, 'converted_json') 
os.mkdir(converted_dir, 0777) 

for subdir1, dirs1, files1 in os.walk(dir_path): 
    for file in files1: 

     try: 
      if file.endswith(".json"): 
       file = open(os.path.join(subdir1, file)) 
       file_name = str.split(file.name, '/') 

       conv_json = open(os.path.join(converted_dir, str(file_name[-1]) + '_converted'), 'wb') 

       conv_json.write('#################################################################################################################################') 
       conv_json.write('\n') 
       conv_json.write('File Name: ' + file_name[-1]) 
       conv_json.write('\n') 
       conv_json.write('#################################################################################################################################') 
       conv_json.write('\n') 

       parsed_json = json.load(file) 
       s = cStringIO.StringIO() 
       pprint.pprint(parsed_json, s) 

       conv_json.write(s.getvalue()) 

       conv_json.close() 

     except: 
      print 'JSON Files Not Found' 

print 'JSON Processing Completed: ' + str(datetime.datetime.now()) 

答えて

0

私は、この行は、Windows上で悪いことだと思います。代わりにos.path.sepを使用してください。

os.path.joinは、あなたが参加しようとしている2番目の部分が(分割が失敗したので)すでに完全なファイルパスであるので、とても混乱していると思います。

+0

お返事ありがとうございます、私はあなたの提案を検討します。ありがとう! – user8685438