Docly Child

ファイルを解凍する

1145 views

この記事では、zipファイルを解凍する方法を紹介します。

【できるようになること】
・zipファイルを解凍
・解凍されたzipの中から特定のファイルを取り出す
・解凍されたzip内部の各ファイルを繰り返しで利用する


zipの解凍を利用する場面

zipファイルの中身を取り出したい場合に使用します。

 DecompressFile

RoboticCrowdのDecompressFileアクションを使用すると、zipファイルを解凍し、中のファイルを一覧として表示することができます。
※.zipのみ解凍できます。.rarや.7zは解凍できません(2022年10月現在)
※パスワード付きのzipは解凍できません

 ワークフローの設定例

例として、以下のようなワークフローを作成してみます。

「csvファイルが複数格納されたzipファイル」をダウンロードして解凍後、中の全てのcsvファイルの値を読み込む

まず最初に、総務省から「平成27年度電波の利用状況調査の調査結果」のzipファイルをダウンロードします。

以下をエディタモードから貼り付けてください。貼り付け方法はこちらになります。

# ブラウザを開く(総務省)
+open_browser_1:
  action>: OpenBrowser
  url: 'https://www.tele.soumu.go.jp/j/ref/research/tool/result/27result/27band/'
  lang: 'ja-JP'
  headless: true

# ダウンロードボタンをクリック
+click_1:
  action>: Click
  browser: +open_browser_1
  selector: ':nth-child(2) > :nth-child(3) > a'
  confirm: true
  ignoreError: true
  waitForDownload: true

# ダウンロードファイル一覧
+get_download_files_1:
  action>: GetDownloadFiles
  order: DESC
  sort_by: CREATED

1.でファイルがzipファイルとしてダウンロードされているため、解凍処理を設定します。

  • DecompressFileを設定します。
  • 「ファイル」パラメータに、GetDownloadFileのアウトプットを指定します。
  • 詳細設定を開き、「圧縮時の文字コード」パラメータからShift_JISを選択します。

zipの中の各csvファイルを読み込むために、繰り返しを設定します。

  • ForEachを設定します。
  • 「繰り返すリスト」パラメータに、DecompressFileのアウトプットを指定します。
  • 「要素を格納する変数名」パラメータに、任意の変数名を入力します。

最後に、csvを順番に読み込みます。

  • ReadCSVを設定します。
  • ファイル名パラメータに、ForEachの「要素に格納する変数名」に指定した変数を、以下フォーマットで入力します。
    ${csv}

# ブラウザを開く(総務省)
+open_browser_1:
  action>: OpenBrowser
  url: 'https://www.tele.soumu.go.jp/j/ref/research/tool/result/27result/27band/'
  lang: 'ja-JP'
  headless: true
  useShadowDomSelector: false
  private: false

# ダウンロードボタンをクリック
+click_1:
  action>: Click
  browser: +open_browser_1
  selector: ':nth-child(2) > :nth-child(3) > a'
  confirm: true
  ignoreError: true
  timeout: 30000
  waitForDownload: true
  private: false

# ダウンロードファイル一覧
+get_download_files_1:
  action>: GetDownloadFiles
  order: DESC
  sort_by: CREATED
  private: false

# ファイルを展開する
+decompress_file_1:
  action>: DecompressFile
  file: +get_download_files_1
  private: false

# 各要素について繰り返す
+for_each_1:
  for_each>:
    csv: +decompress_file_1
  _do:

    # CSVを読み込む
    +read_c_s_v_1:
      action>: ReadCSV
      filename: ${csv}
      headers: true
      private: false

 解凍したzipからファイルを取得する方法

繰り返しを使わずに、解凍したzipファイルからファイルを取り出す/フィルタリングする方法を紹介します。
この方法は、他のリスト形式のアウトプットを持つアクションに対しても有効/汎用可能です。

GetItemFromListを使用する方法です。
この方法では、リスト型アウトプット(1次元配列)から番号で指定した要素を、テキスト形式で1つだけ取り出せます。

SearchItemFromListを使用する方法です。
この方法では、リスト型アウトプット(1次元配列)から任意のテキストを含む要素を、リスト形式で複数取り出せます。

検索クエリにファイルの拡張子を指定する形での使用が便利です。

# ブラウザを開く(総務省)
+open_browser_1:
  action>: OpenBrowser
  url: 'https://www.tele.soumu.go.jp/j/ref/research/tool/result/27result/27band/'
  lang: 'ja-JP'
  headless: true

# ダウンロードボタンをクリック
+click_1:
  action>: Click
  browser: +open_browser_1
  selector: ':nth-child(2) > :nth-child(3) > a'
  confirm: true
  ignoreError: true
  waitForDownload: true

# ダウンロードファイル一覧
+get_download_files_1:
  action>: GetDownloadFiles
  order: DESC
  sort_by: CREATED

# ファイルを展開する
+decompress_file_1:
  action>: DecompressFile
  file: +get_download_files_1
  filename_encoding: Shift_JIS

# リストから要素を取得
+get_item_from_list_1:
  action>: GetItemFromList
  list: +decompress_file_1
  index: '0'

# リスト内を検索
+search_item_from_list_1:
  action>: SearchItemFromList
  list: +decompress_file_1
  query: '5GHz帯アマチュア.csv'
<DecompressFile>解凍/zip

このページは役に立ちましたか?