可以在任何目录中运行的脚本

时间:2013-07-24 17:10:29

标签: python

目前,我已经创建了一个代码,可以根据.csv文件中的数据生成图表。但是,如果该代码存在于带有csv文件的文件夹中,我只能运行代码。如何创建脚本文件,使其不必与.csv文件位于同一目录中。此外,我希望相同的脚本读取该其他目录中的每个csv文件。

为什么下面的代码错了?

Here=os.path.dirname(os.path.abspath(__file__))
directory = "path of directory"
listing = os.listdir(directory)
for files in listing:
    if files.endswith('.csv'):  
    full_name = os.path.join(Here,files)
    df=pd.read_csv(full_name)

4 个答案:

答案 0 :(得分:1)

只需设置directory="/path/to/fldr/with/csv"

full_name = os.path.join(directory,files)

答案 1 :(得分:0)

是的,这是错的;你需要接受一个告诉你的脚本在哪里找到CSV文件的参数:

import argparse

def import_function(sourcedir):
    for filename in os.listdir(sourcedir):
        csvfilename = os.path.join(sourcedir, filename)
        with open(csvfilename) as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                # etc.    

if __name__ == '__main__':
    parser = argparse.ArgumentParser('CSV importer')
    parser.add_argument('sourcedir', default='.')
    options = parser.parse_args()
    import_function(options.sourcedir)

现在,您的脚本接受一个命令行参数,即列出文件的目录路径:

python yourscript.py /path/to/directory

默认是查看当前目录。

答案 2 :(得分:0)

您正在列出一个空目录(directory = '')。

要获取当前目录,您需要os.getcwd()

在指定要操作的目录时,我没有遇到什么问题。可以使用命令行参数完成(查看sys.argv)。

答案 3 :(得分:0)

您正在为变量“Here”分配所需的路径,但之后您将创建一个空字符串变量'directory'并使用它来提供列表。您的列表将仅包含基本文件夹(您编码的位置)中的文件,因为您只搜索目录“”中的文件。我认为你打算用'Here'来做你的列表

directory = Here