ある参考書を見ながらpythonの勉強をしております。
開発環境としては、
visual Basic codeとpython3.8.2です。
ファイル操作のプログラムを作成しており、
ソースコード内で
『import pathlib』でライブラリをインポートし、
該当フォルダを『path = pathlib.Path("..\data\sales")』として取得しています。
このプログラムを実行すると、下のようなエラーで表示されました。
よく見てみると、パスの中身が勝手に、『'..\data\sales'』と変わっているようです。
パスが変わったため、該当フォルダにたどり着けずエラーが発生したと思うのですが、
このような現象の解決策があればご教授いただけますでしょうか。
(ちなみに、同じファイルをwindowsのコマンドプロンプトから実行したときは問題なく出力できましたので、ソースコード自体に問題はないと思われます。)
ご回答よろしくお願いします。
エラーメッセージ
FileNotFoundError: [WinError 3] 指定されたパスが見つかりません。: '..\data\sales'
###ソースコード
import pathlib # 標準ライブラリ ファイルやフォルダーのパスを扱いやすくするため import openpyxl # 外部ライブラリ pip install openpyxl import csv # 標準ライブラリ lwb = openpyxl.Workbook() #売上一覧表ワークブック 新規ワークブックの作成 lsh = lwb.active #売上一覧表ワークシート アクティブにする list_row = 1#何行目に新規の売上明細を書き込むかを示す変数 追記できるようになる path = pathlib.Path("..\data\sales") for pass_obj in path.iterdir(): if pass_obj.match("*.xlsx"):#フォルダの中ファイルがExcelファイルなら wb = openpyxl.load_workbook(pass_obj)#ワークブックを読み込む for sh in wb:# ワークブックの中のワークシートの処理を実行する for dt_row in range(9,19):#1列ずつ順番にデータを見ていく range(開始値,終了値) if sh.cell(dt_row, 2).value != None: #より説明的なコード #lsh.cell(row=list_row, column=1).value = \ # sh.cell(row=2, column=7).value #伝票NO lsh.cell(list_row, 1).value = sh.cell(2, 7).value #伝票NO lsh.cell(list_row, 2).value = sh.cell(3, 7).value #日付 lsh.cell(list_row, 3).value = sh.cell(4, 3).value #得意先コード lsh.cell(list_row, 4).value = sh.cell(7, 8).value #担当者コード lsh.cell(list_row, 5).value = sh.cell(dt_row, 1).value #No lsh.cell(list_row, 6).value = sh.cell(dt_row, 2).value #商品コード lsh.cell(list_row, 7).value = sh.cell(dt_row, 3).value #商品名 lsh.cell(list_row, 8).value = sh.cell(dt_row, 4).value #数量 lsh.cell(list_row, 9).value = sh.cell(dt_row, 5).value #単価 lsh.cell(list_row, 10).value = sh.cell(dt_row, 4).value * \ sh.cell(dt_row, 5).value #金額 lsh.cell(list_row, 11).value = sh.cell(dt_row, 7).value #備考 list_row += 1 #行数を更新 #lwb.save("..\data\sales\salesList.xlsx") with open("..\data\sales\salesList.csv","w",encoding="utf_8_sig") as fp: writer = csv.writer(fp, lineterminator="\n") for row in lsh.rows: writer.writerow([col.value for col in row])
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/18 09:12
2020/04/18 09:14