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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

1345閲覧

[python3]macで作ったプログラムをwindowsでも動かしたいが、エラーになってしまいます。

npy31

総合スコア7

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2017/09/20 13:11

編集2017/09/21 16:11

###前提・実現したいこと
ITの業種ではありませんが、仕事を効率化するためにプログラミングを始めました。
故に、見苦しい質問、お許しください。。。

python3を使って、csvファイルのデータを読み込んで、決まった規則に従って、別のxlsxファイルへ
書き込むという単純なシステムを作りたいと思っています。
はじめはmacで作って実行した結果、狙い通りのアウトプットが得られたのですが、
同じシステムをwindowsで動作させたいと思い、軽い気持ちで同じコードを入力したら
エラーが出てしまいました。
中身としてはどうやら出力先のエクセルシートを認識できないというものなのですが、
理由がわからずに立往生を喰らっています。。。

###発生している問題・エラーメッセージ
出てきたエラーメッセージは以下の通りです。↓

KeyError Traceback (most recent call last)
<ipython-input-2-a9c5cbcb8923> in <module>()
15
16 #処理シートの指定
---> 17 sheet = wb.get_sheet_by_name("sheet1")
18
19 for(num,row) in enumerate(rows):

C:\Users\nino1\Anaconda3\lib\site-packages\openpyxl\compat_init_.py in new_func(*args, **kwargs)
58 lineno=_code.co_firstlineno + 1
59 )
---> 60 return obj(*args, **kwargs)
61 return new_func
62

C:\Users\nino1\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py in get_sheet_by_name(self, name)
203
204 """
--> 205 return self[name]
206
207 def contains(self, key):

C:\Users\nino1\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py in getitem(self, key)
229 if sheet.title == key:
230 return sheet
--> 231 raise KeyError("Worksheet {0} does not exist.".format(key))
232
233 def delitem(self, key):

KeyError: 'Worksheet sheet1 does not exist.'

###該当のソースコード

python

1import csv 2 3def getCsvData(targetFile) : 4 csvData = [] 5 f = open(targetFile, 'r') 6 dataReader = csv.reader(f) 7 8 for row in dataReader: 9 csvData.append(row) 10 return csvData 11 12#1 python3 13import openpyxl, pprint 14import xlrd 15 16targetSheets = [] 17inputExcel = '/Users/npy31/Downloads/python/test/target.xlsx' 18outputExcel = inputExcel.replace('.xlsx', '_result.xlsx') 19 20#csvファイル読み込み 21hoge = '/Users/npy31/Downloads/python/test/input.csv' 22rows = getCsvData(hoge) 23 24book = xlrd.open_workbook(inputExcel) 25wb = openpyxl.load_workbook(inputExcel) 26 27#処理シートの指定 28sheet = wb.get_sheet_by_name("sheet1") 29 30for(num,row) in enumerate(rows): 31 number = row[0] 32 hatyo = row[1] 33 val = rpw[2] 34 35 targetRow = 5+ num 36 37 sheet['B' + str(targetRow)].value = number 38 sheet['C' + str(targetRow)].value = sample 39 sheet['D' + str(targetRow)].value = val 40wb.save(outputExcwl) 41print('完了')

###試したこと
恥ずかしながら手も足も出ていません。。。

###補足情報(言語/FW/ツール等のバージョンなど)
〇python3.6.1
〇上記プログラムはmacだと正常に動作

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

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

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

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

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

guest

回答2

0

ベストアンサー

質問に書いたコードの打ち間違いと思われる箇所は直した上でとなりますが、pathの書き方が異なります。

Macの場合は「/Users/name/~」のように書きますが、Winの場合は絶対パスでの指定なら「c:\users\name\~」のようにドライブ名から指定します。
また実行ファイルの場所から相対指定する場合は、実行pyファイルと同じなら「./target.xlsx」、上位なら「../target.xlsx」のような書き方もできます。

import csv def getCsvData(targetFile) : csvData = [] f = open(targetFile, 'r') dataReader = csv.reader(f) for row in dataReader: csvData.append(row) return csvData #1 python3 import openpyxl, pprint import xlrd targetSheets = [] inputExcel = "./target.xlsx" #'/Users/npy31/Downloads/python/test/target.xlsx' outputExcel = inputExcel.replace('.xlsx', '_result.xlsx') #csvファイル読み込み hoge = "./input.csv" #'/Users/npy31/Downloads/python/test/input.csv' rows = getCsvData(hoge) book = xlrd.open_workbook(inputExcel) wb = openpyxl.load_workbook(inputExcel) #処理シートの指定 sheet = wb.get_sheet_by_name("Sheet1") for(num,row) in enumerate(rows): number = row[0] hatyo = row[1] val = row[2] targetRow = 5+ num sheet['B' + str(targetRow)].value = number sheet['C' + str(targetRow)].value = hatyo sheet['D' + str(targetRow)].value = val wb.save(outputExcel) print('完了')

投稿2017/09/20 23:44

mdj

総合スコア220

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

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

npy31

2017/09/21 16:09

相対パスで実行するとうまく動作しました! ありがとうございます!!
guest

0

私もmacなのであまり意識したことが無かったんですけど、pathの問題でしょうか?

リンクですが。。

Windowsのパスがうまく指定\表示できない問題 in Python

投稿2017/09/20 13:51

編集2017/09/20 13:52
namnium1125

総合スコア2043

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

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

npy31

2017/09/20 15:16

ご回答ありがとうございます。 添付いただいたwebサイトを拝見しました。 pathに着目して、ディレクトリ指定の「/」を「\」に変更してプログラムを実行したところ、やはりエラーが出てしまいました。 File "<ipython-input-2-b6cbdddae336>", line 6 inputExcel = '\Users\nino1\Downloads\python\test\target.xlsx' ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \UXXXXXXXX escape 上記のエラーが出た場合、「\」がエスケープとみなされている可能性が高いため、raw文字を使うのが得策とあり、ディレクトリの頭に「r」を付けましたが、そうすると質問文の時と同じエラーメッセージに戻ってしまいました。。。 ファイルの存在は認識しているようですが、シートを認識していないようです。 macとwindowsでは、結構勝手が違うのですね・・・
namnium1125

2017/09/20 16:05

CドライブやDドライブ等の指定はした上で、エラーなのでしょうか? そもそもWindowsにルートディレクトリが通用するんですかね?
npy31

2017/09/21 16:08

対象のファイルの指定を相対パスで行ったら解決しました!! ありがとうございます。
namnium1125

2017/09/21 16:13

解決して何よりです。最初から相対パスの方が良かったかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問