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

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

新規登録して質問してみよう
ただいま回答率
85.47%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

3444閲覧

pandasのPermissionError: [WinError 32]について

OkukawaRyoki

総合スコア16

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/07/29 02:58

こんにちは、最近pandas、openpyxlについて勉強をしているのですが
pandasで多次元配列を出力する際に、4次元配列だと出力できるのですが5次元にすると

error

1PermissionError: [WinError 32] プロセスはファイルにアクセスできません。 2別のプロセスが使用中です。: 'C:\Users\hoge\AppData\Local\Temp\openpyxl.pqihjvda'

というようなエラーが発生します。

python

1for i in range(len(out_path_list)): # 行番号を要素分取得するループ分 2 excel_index.append(i + 1) 3 4out_list = [[0 for j in range(5)] for s in range(len(out_path_list))] # 多次元配列を作成 5for i in range(len(out_list)): 6 for j in range(len(out_list[i])): 7 if j == 0: 8 out_list[i][j] = out_path_list[i] 9 if j == 1: 10 out_list[i][j] = out_error_path_list[i] 11 if j == 2: 12 out_list[i][j] = out_error_list[i] 13 if j == 3: 14 out_list[i][j] = out_time_list[i] 15 if j == 4: 16 out_list[i][j] = out_size_list[i] 17 18 19df = pd.DataFrame(out_list, index=excel_index, columns=['パス', 'エラーパス', 'エラー', 'エラー発生時間', 'サイズ']) # エクセルのデータフレーム作成 20df.to_excel(r'D:\dis_box_Tools\box_summery\summary\summary.xlsx') # エクセルファイル作成 & データを書き出し ←ここにの保存先とエクセル名を記入

てな感じなのですがout_error_path_listをなくすと上手くいきます。
これはout_error_path_listに入っている要素がいけないのでしょうか。
pandasでエクセルに出力できない文字列があるのか、
文字数制限があるのか、

かなり詰まっているのでよろしければ教えてください。。
よろしくお願いいたします。

足りない情報ありましたら随時追加しますのでよろしくお願いいたします。

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

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

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

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

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

aokikenichi

2020/07/29 03:56

out_error_path_list にはどのような内容が入っているのでしょうか
OkukawaRyoki

2020/07/29 04:11

個人情報なので詳しくは言えないのですが、 /123456_文字列/78_文字列/AAA_BBB/901-cccc/dddddd/23456789_eee/AZ_文字列文字列/ddd文字列文字列/12_AB_CDE/Abcde FG 12345678 AB CDEFGHIJ/Abcdefgad_dfads_1234567.abc のような\(\)区切りのパスが100個ほど入っております。いろいろと検証したのですがスライスで115字目までの指定では入るのですが116文字目までを選択すると入らなくなります。しかし、out_error_path_listの中身は20文字程度のものから115文字以上のものまでいろいろと入っております
OkukawaRyoki

2020/07/29 04:24

追記になりますが、エラーが起きていしまう文字数目だけを引っ張ってきたのですが、['n', 'n', 'n', 'n', '\uffff', 'n', 'n', 'n', 'n', '索', '\\', '\\', '\\', '\\', '\\', '\\', '\\', 'n', '5', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', ' ', 'n', '1', 'n', 'n', 'n', 'n', 'n', 'n', 'セ', 'ク', 'n'] '\uffff'というようなunicodeや'\\'のようなエスケープシーケンスがありました。これが原因でしょうか?
aqufiz

2020/07/29 04:53

エラーの全文を見せてもらうことは可能でしょうか
OkukawaRyoki

2020/07/29 05:05 編集

['n', 'n', 'n', 'n', '\uffff', 'n', 'n', 'n', 'n', '索', '\\', '\\', '\\', '\\', '\\', '\\', '\\', 'n', '5', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', ' ', 'n', '1', 'n', 'n', 'n', 'n', 'n', 'n', 'セ', 'ク', 'n'] 40 Traceback (most recent call last): File "test2.py", line 43, in <module> df.to_excel(r'D:\dis_box_Tools\box_summery\summary\summary.xlsx') # エクセルファイル作成 & データを書き出し ←ここ にの保存先とエクセル名を記入 File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\generic.py", line 2175, in to_excel formatter.write( File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\io\formats\excel.py", line 738, in write writer.save() File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\io\excel\_openpyxl.py", line 43, in save return self.book.save(self.path) File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save save_workbook(self, filename) File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook writer.save() File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 275, in save self.write_data() File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 75, in write_data self._write_worksheets() File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 215, in _write_worksheets self.write_worksheet(ws) File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\writer\excel.py", line 200, in write_worksheet writer.write() File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 358, in write self.write_rows() File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 124, in write_rows self.write_row(xf, row, row_idx) File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 146, in write_row write_cell(xf, self.ws, cell, cell.has_style) File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\cell\_writer.py", line 93, in lxml_write_cell el.text = value File "src\lxml\etree.pyx", line 1024, in lxml.etree._Element.text.__set__ File "src\lxml\apihelpers.pxi", line 747, in lxml.etree._setNodeText File "src\lxml\apihelpers.pxi", line 735, in lxml.etree._createTextNode File "src\lxml\apihelpers.pxi", line 1540, in lxml.etree._utf8 ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters Error in atexit._run_exitfuncs: Traceback (most recent call last): File "C:\Users\hoge\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\worksheet\_writer.py", line 32, in _openpyxl_shutdown os.remove(path) PermissionError: [WinError 32] プロセスはファイルにアクセスできません。別のプロセスが使用中です。: 'C:\\Users\\hoge\\AppData\\Local\\Temp\\openpyxl.ygpghcu9'
OkukawaRyoki

2020/07/29 05:06

全文になります やはりユニコードっぽいですよね
aqufiz

2020/07/29 05:47

エラー文的にはユニコードかアスキーで書いてほしいって, 言ってる気がします.
guest

回答1

0

ベストアンサー

問題となっているのは,

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters ```の部分であると思います. XML標準では有効な文字を次のように定義しています.

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

そのため,この範囲からはみ出てしまっている部分でエラーが起きています. このエラーから派生して,”PermissionError”が起きているのだと思います. 非ASCII文字を使うときは,[こちら](https://stackoverflow.com/questions/17138088/french-and-lxml-text)に書いてあるように,変換を行う必要があるようです.

投稿2020/07/29 05:41

aqufiz

総合スコア70

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

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

OkukawaRyoki

2020/07/29 05:57

ご回答ありがとうございます。 out_error_path_listに入れる際にfor文でリストを回して入れてるのですがその際に if '\uffff' in t: t = t.decode('text_encoding') のような記述をしてもエスケープできないのですがどうすればいいのでしょう tはリストを一つずつ取得した要素です。
aqufiz

2020/07/29 06:20

t = t.encode('unicode-escape') とすればできると思います. 特定のリストの中身だけでなく,リスト全体で行ったほうが確実かもしれません.
OkukawaRyoki

2020/07/29 06:23

出来ました!!ありがとうございます。リスト全体にするようにします。この度は大変お手数かけましたが丁寧にお答えいただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問