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

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

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

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

Q&A

解決済

1回答

654閲覧

xlsxをcsvに変換、がうまくいきません。(pandas)

mlin

総合スコア24

Python

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

0グッド

0クリップ

投稿2021/09/29 05:18

恐れ入ります。
xslxをcsvにかんたんに変換できるということで試しているのですが、
すべてのxslxをcsvにしようと思ってforループにしたら突然動かなくなってしまいました。

動いたコード(正常に完了しました)

import pandas df = pandas.read_excel('test.xlsx', sheet_name=0) df.to_csv('test.csv', index=False)

これを

import glob import os import pandas from pathlib import Path files = glob.glob("*") for file in files: fname, ext = os.path.splitext( os.path.basename(file) ) if ext == ".xlsx": csv= fname + ".csv" if Path(csv).exists(): print (f"{fname} exists.") else: print (file)  #・・・(1) print (csv) df = pandas.read_excel(file, sheet_name=0)   #・・・(2) df.to_csv(f'{fname}.csv', index=False)

のようにしてみたらエラーになってしまいます。

Traceback (most recent call last): File "E:\*********\allfile.py", line 18, in <module> df = pandas.read_excel(file, sheet_name=0) File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\util\_decorators.py", line 311, in wrapper return func(*args, **kwargs) File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 364, in read_excel io = ExcelFile(io, storage_options=storage_options, engine=engine) File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 1191, in __init__ ext = inspect_excel_format( File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 1070, in inspect_excel_format with get_handle( File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\common.py", line 710, in get_handle handle = open(handle, ioargs.mode) FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\$test.xlsx'

(1)のprintではtest.xlsxとなっているので
(2)では df = pandas.read_excel("test.xlsx", sheet_name=0)
となっているだろうと思うのですが・・・

エラーをよく見ると何故か
No such file or directory: 'C:\Users$test.xlsx'
となっています。
その前のPRINTでは'C:\Users$'はくっついていないのになぜかくっついてしまうようです・・?

(2)の部分を変数を使わないで実行してみるとちゃんと動きます。
変数の内容がおかしいのかと(1)でprintしてみましたがおかしくはなかったです。

一体どういうことなのでしょうか・・・。

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

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

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

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

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

etherbeg

2021/09/29 11:14

'C:\\Users\\$test.xlsx' ではないとしたら実際にファイルがある場所のパスは何になりますか?
mlin

2021/09/29 11:18

\$test.xlsx という強制終了時のゴミが残ってしまっていました。 削除することで正常動作しました! 隠しファイルになっており気が付きませんでした。
guest

回答1

0

ベストアンサー

xlsxファイルを閉じてください。

開いている状態では一時ファイルとして(?)$が先頭についたファイルが生成されます。
デフォルトのExplorerの設定だと表示されなかったと思いますが、Pythonなど他のツールを使う場合には取得されてしまい、今回のような事象が発生します。

files = glob.glob("*") 中身を表示して確認してみてはどうでしょうか。

投稿2021/09/29 06:17

yamap55

総合スコア1376

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

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

mlin

2021/09/29 11:01

回答ありがとうございます。 エクセルは開いてないです・・・。 変数の中身ではなく、直接ファイル名を書くとちゃんと動きます。 変数の中身がおかしいのかと思いprintしましたが、同じでした・・・。 一体どういうことなのでしょうか・・・ > files = glob.glob("*") 中身を表示して確認してみてはどうでしょうか。 こちらはどういうことでしょうか? (1)でprintしていますが、そう言うことではなくてですか?
mlin

2021/09/29 11:12

あああ!わかりました! cygwinでls-laしてみたところ'~$エンタメ.xlsx'というファイルが残留してしまっていました。 これを消すことでちゃんと動作しました! エクセルは開いてなかったんですが、前回に強制終了かなにかして隠しファイルがのこっていたんですね・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問