如何从jupyter笔记本制作一个python可执行文件,从配置文件中读取主程序中要读取的文件的路径



我正在尝试制作一个jupyter笔记本代码的可执行(.exe)python文件。该代码基本上从文件夹a和文件夹B中读取一堆文件,并找到文件夹中文件之间的差异,生成结果的csv。我从哪里开始寻找如何设置配置文件,可执行文件读取该文件以获得需要比较的输入文件夹(包含所有文件)的路径。该配置文件可以是json或文本文件,用户可以编辑该文件并为其添加当前目录,其中包含文件的两个文件夹位于该目录中。在我的代码中,我从自己的路径读取文件夹,并将directory_A和directory_B的路径添加为directory_A=r〃;C: \Users\Bilal\Python\Task1\OlderVersionFiles\"并且对于directory_ B=r〃;C: \Users\Bilal\Python\Task1\NewVersionFiles\"。我知道如何将jupyter笔记本转换为python可执行文件,这要归功于:是否可以生成jupyter的可执行文件(.exe)?这创建了一个包含大量文件的构建文件夹和一个在我的情况下什么都不做的应用程序文件。

  1. 如何使它创建Record.csv文件,当我通过jupyter点击可执行文件时,我的代码会生成该文件?使用python文件中的静态路径代码引用存储在我的系统中的文件夹的路径
  2. 如何让应用程序文件从配置文件中读取路径并输出文件夹之间存在差异的csv

我查找差异的代码如下

import os
import csv
import pandas as pd
import io
import re
dir_A_dict = dict()
directory_A = r"C:\Users\Bilal\Python\Task1\OlderVersionFiles\"
dir_A_files= [os.path.join(directory_A, x) for x in os.listdir(directory_A) if '.csv' in str(x)]
dir_B_dict = dict()
directory_B = r"C:\Users\Bilal\Python\Task1\NewVersionFiles\"
dir_B_files = [os.path.join(directory_B, x) for x in os.listdir(directory_B) if '.csv' in str(x)]
for file_ in dir_A_files:

f = open(file_, 'r')
reader = csv.reader(f)
header = next(reader)

for line in reader:
if ''.join(line) not in dir_A_dict.keys():
dir_A_dict[''.join(line)] = {
"record": line,
"file_name": os.path.basename(file_),
"folder" : "OlderVersion",
"row": reader.line_num
}
for file_ in dir_B_files:

f = open(file_, 'r')
reader = csv.reader(f)
header = next(reader)

for line in reader:
if ''.join(line) not in dir_B_dict.keys():
dir_B_dict[''.join(line)] = {
"record": line,
"file_name": os.path.basename(file_),
"folder" : "NewVersion",
"row": reader.line_num
}
aset = set()
for v in dir_A_dict.values():
aset.add(tuple(v['record']))

bset = set()
for v in dir_B_dict.values():
bset.add(tuple(v['record']))

in_a_not_b = aset - bset
in_b_not_a = bset - aset
diff = in_a_not_b.union(in_b_not_a)
record_ = []
for val in diff:
file_ = ''.join(val)
record_.append(file_)

# Writing dictionary values to a text file    
with open("Report2.txt", 'w') as f: 

for i in range(73488):
if record_[i] not in dir_A_dict.keys():
f.write('%sn' % ', '.join(str(x)for x in dir_B_dict[record_[i]].values()))
else:
f.write('%sn' % ', '.join(str(x)for x in dir_A_dict[record_[i]].values()))
# regular expression to capture contents of balanced brackets
location_regex = re.compile(r'[([^[]]+)]')
with open(r"C:\Users\Bilal\Report2.txt", 'r') as fi:
# replaced brackets with quotes, pipe into file-like object
fo = io.StringIO()
fo.writelines(str(re.sub(location_regex, r'"1"', line)) for line in fi)
# rewind file to the beginning
fo.seek(0)
# read transformed CSV into data frame
df = pd.read_csv(fo)
df.columns = ['Record', 'Filename', 'Folder', "Row"]
# print(df)
df.to_csv('Records2Arranged.csv')

翻译.ibpnb不需要让你的生活更加困难,因为它只是带有一些额外数据的python代码。

要从python代码中创建可执行文件,您可以使用py2exe制作单个exe,也可以使用带有嵌入选项的cython,我个人发现它更容易使用,但更难直接登录。

最新更新