以下代码可单独使用。我用py2exe创建了一个无法运行的可执行文件。该脚本处理和排序一些csv文件。如果我将此代码放在运行可执行文件的“dist”目录中(因此它与正在处理的csv文件具有相同的文件路径深度),代码可以正常工作;但是同一目录中的可执行文件本身不起作用。
import glob
import os
import pandas as pd
current_dir = os.path.dirname(os.path.realpath(__file__))
directory = os.path.sep.join(current_dir.split(os.path.sep)[:-2])
csvfiles = os.path.join(directory, '*.csv')
for csvfile in glob.glob(csvfiles):
filename = os.path.basename(csvfile)
if '_sorted' in filename:
print "Remove this file"
os.remove(csvfile)
csvfiles = os.path.join(directory, '*.csv')
for csvfile in glob.glob(csvfiles):
filename = csvfile
df = pd.read_csv(filename)
df = df[df["ORGANIZATION"]!="WPPL"]
df = df.sort('MEETING START TIME')
#write new csv file
df.to_csv(filename + '_sorted.csv', cols=["DATE","MEETING START TIME","MEETING END TIME","DESCRIPTION","ORGANIZATION","LOCATION"],index=False)
raw_input("Press enter to close")
原始输入语句也没有保持屏幕打开,所以我无法真正看到发生了什么。
感谢
答案 0 :(得分:1)
尝试从dirname(__file__)
关闭相对路径来访问数据文件是一个非常糟糕的主意,除非您只想在构建树中运行该程序。如果你想能够安装和运行程序 - 无论是使用py2exe还是其他任何机制 - 你只是在寻找麻烦。
如果您尝试使用可执行文件打包文件,正确的方法是使用py2exe
中的data_files
机制,或者,如果您可以安装和使用setuptools
},更强大,更灵活的Package Resources机制。
另一方面,如果您希望用户在安装应用程序后提供CSV文件,您几乎肯定不想让他将它们放入您应用程序的目录中。通常要做的是将它们作为当前工作目录的相对路径来访问。换句话说,只需使用.
,而不是dirname(__file__)
。
但是,如果你真的想这样做......问题是__file__
是主脚本的文件名 - 当你运行捆绑的可执行文件时,这当然没用。您可以使用sys.argv[0]
或sys.executable
,具体取决于您的使用情况。