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

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

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

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

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Python 3.x

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

MacOS(OSX)

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

pandas

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

Q&A

0回答

701閲覧

py2appで作成したMACOS用アプリのファイル更新エラーの解決

ikemo94

総合スコア0

CSV

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

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Python 3.x

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

MacOS(OSX)

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

pandas

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

0グッド

0クリップ

投稿2021/11/27 08:58

編集2021/11/27 09:11

前提・実現したいこと

pythonのpysimpleguiを使用してGUIアプリを作成しています。
閉じるボタン押下後、ユーザ情報とパスワードの入力情報をファイルに保持し、次回以降アプリを開く際入力しなくてよい機能を実装しようとした際、問題が発生しました。該当の事象が発生したタイミングは以下の通りです。

・py2appを使用してGUIアプリを作成 ← 閉じるボタンは正常に機能
・distフォルダを圧縮 ← 閉じるボタンは正常に機能
・GoogleDriveにアップロードし、ダウンロードして解凍 ← 閉じるボタンは正常に機能せず

初めて投稿しますので、掲載すべき情報が不足しているかもしれません。その際はご指摘頂けますと幸いです。
解決策が見当たらないので、有識者のお力添えを頂きたく思います。何卒よろしくお願い致します。

発生している問題・エラーメッセージ

OSError: [Errno 30] Read-only file system: 'csv_file_data.csv'

該当のソースコード

import PySimpleGUI as sg from os.path import basename import csv import re import pandas as pd import sys choice_csv_file = [] df_choice_csv_file_wk = pd.read_csv('choice_data.csv',header=0) choice_csv_files_wk = df_choice_csv_file_wk.values.tolist() for choice_csv_file_wk in choice_csv_files_wk: choice_csv_file_aft = str(choice_csv_file_wk).replace("<", '').replace(">", '').replace('["', '').replace('"]', '').replace('[', '').replace(']', '').replace("'", '') choice_csv_file.append(choice_csv_file_aft) df_input_csv_file = pd.read_csv('csv_file_data.csv',header=0) def_data = df_input_csv_file.dropna(how='all').values.tolist() frame1 = [[sg.Radio('1ファイルにシートごとにまとめる', 1, key='-MULTI-SHEET-', default=True)], [sg.Radio('1ファイル1シートにまとめる', 1, key='-ONE-SHEET-')]] frame2 = [[sg.Text('ユーザー名:', size=(9, 1),pad=((5,0),(5,5))), sg.InputText(choice_csv_file[0],size=(12, 1),key='-USER-'),sg.Text('パスワード:', size=(9, 1),pad=((5,0),(5,5))), sg.InputText(choice_csv_file[1],size=(10, 1),key='-PASS-')]] col1 = [[sg.Button('実行')], [sg.Button('終了')]] layout = [[sg.Frame('ログイン情報', frame2)], [sg.Text('ファイル選択', size=(15, 1), justification='right'), sg.InputText('ファイル一覧', enable_events=True,), sg.FilesBrowse('ファイルを追加', key='-FILES-', file_types=(('Excell ファイル', '*.xlsx'),))], [sg.Button('ログをコピー'), sg.Button('ログをクリア')], [sg.Output(size=(100, 5), key='-MULTILINE-')], [sg.Button('入力一覧をクリア')], [sg.Listbox([], size=(100, 10), enable_events=True, key='-LIST-')], [sg.Frame('処理内容', frame1), sg.Column(col1)]] window = sg.Window('エクセルの結合', layout) new_files = [] new_file_names = [] while True: # Event Loop event, values = window.read() if event in (None, '終了'): df_input_csv_file.to_csv('csv_file_data.csv',index=False) user = values['-USER-'] #ログインするアカウントID pwd = values['-PASS-'] #使用するパスワード choice_csv_file = ["<"+str(user)+">","<"+str(pwd)+">"] df_choice_csv_file_wk['choice'] = pd.DataFrame(choice_csv_file) df_choice_csv_file_wk.to_csv('choice_data.csv',index=False) window.close() #ウインドウを消す break if event == '実行': print('処理を実行') print('処理対象ファイル:', new_files) if values['-MULTI-SHEET-']: print('複数シートを1ファイルにまとめる') elif values['-ONE-SHEET-']: print('複数シートを1シートにまとめる') sg.popup('処理が正常終了しました') elif event == 'ログをクリア': print('ログをクリア') window.FindElement('-MULTILINE-').Update('') elif event == 'ログをコピー': window.FindElement('-MULTILINE-').Widget.clipboard_append(window.find_element('-MULTILINE-').Get()) sg.popup('ログをコピーしました') elif event == '入力一覧をクリア': print('入力一覧をクリア') new_files.clear() new_file_names.clear() window['-LIST-'].update('') elif values['-FILES-'] != '': print('FilesBrowse') new_files.extend(values['-FILES-'].split(';')) new_file_names.extend([basename(file_path) for file_path in new_files]) print('ファイルを追加') window['-LIST-'].update(new_file_names) # リストボックスに表示します window.close()

試したこと

・resourcesフォルダにある該当のCSVファイルの権限をどのユーザも 読み/書き できるように変更 → 解決せず
・以下のコマンドでデバッグ実行できるという情報があったので実行 → エラーは発生せず正常終了
/dist/file_update.app/Contents/MacOS/file_update

補足情報(FW/ツールのバージョンなど)

使用言語:python3.9

使用しているライブラリのバージョンは以下の通りです。

Package Version


pandas 1.3.4
pip 21.3.1
py2app 0.26.1
PySimpleGUI 4.55.1

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

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

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

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

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

1T2R3M4

2021/11/27 09:03

インデントをつけていただけませんか。
ikemo94

2021/11/27 09:11

ご指摘頂きありがとうございます。 インデントをつけて内容を更新しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問