Как изменить python скрипт на .exe с пользовательскими путями ввода и вывода в python - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть сценарий python, я хочу изменить этот простой сценарий на файл .exe с заданным пользователем путем ввода и вывода.

в приведенном ниже сценарии «csv» является папкой ввода и содержит несколько текстовых файлов,

import pandas as pd 
import numpy as np 
import os 
for file in os.listdir('csv/'):
    filename = 'csv/{}'.format(file)
    print(filename)

    df=pd.read_csv(filename)
    df.to_csv(path_out)

1 Ответ

0 голосов
/ 07 апреля 2020

Простой способ сделать это с помощью cx_freeze:

  1. conda install - c conda-forge cx_freeze или pip install cx_freeze в вашу среду с numpy и pandas

  2. Создайте папку с именем dist для вашего нового .exe

  3. Сохраните приведенный ниже код как csv_thing.py или как угодно хотите, чтобы он вызывался.

  4. Запустите команду: cxfreeze csv_thing.py --target-dir C: \ somepath \ dist

  5. Существует большая вероятность, что без использования установочного файла cx_freeze (файл spe c в pyinstaller), что не все файлы будут скопированы в каталог dist. Numpy и pandas из Enacs Anaconda часто бывают хитрыми.

  6. Если происходит сбой файла, вы можете вручную скопировать файлы .dll в папку dist; это легко, если вы просто возьмете их всех. Если вы используете Enaconda env, они, вероятно, живут здесь: C: \ Users \ your_user_account \ Anaconda3 \ envs \ panel \ Library \ bin. В противном случае возьмите их все из местоположения numpy: C: \ Users \ matth \ Anaconda3 \ envs \ panel \ Lib \ site-packages \ numpy и скопируйте в каталог dist.


import numpy as np  
import pandas as pd  
import os   

in_dir = input(' enter a folder path where your .csvs are located: ')  
out_dir = input(' enter a folder path where your .csvs will go: ')  

csv_list = [os.path.join(in_dir, fn) for fn in next(os.walk(in_dir))[2]if fn.endswith('.csv')]  

for csv in csv_list:  
    file_name = os.path.basename(csv)  
    print(file_name)

    df = pd.read_csv(csv)
    df.to_csv(os.path.join(out_dir, file_name))
...