繁体   English   中英

我该怎么做才能使python脚本可以从任何目录运行:脚本文件不必与.csv文件位于同一目录中?

[英]What do I do to make a python script that can run from any directory: the script file doesn’t have to be in the same directory as the .csv files?

目前,我已经创建了一个代码,可以从.csv文件中的数据制作图形。 但是,如果该代码存在于csv文件的文件夹中,则我只能运行该代码。 如何制作脚本文件,以使它不必与.csv文件位于同一目录中。

假设您打算在代码中包含一个固定的CSV文件,请根据脚本路径存储一个绝对路径:

HERE = os.path.dirname(os.path.abspath(__file__))

csv_filename = open(os.path.join(HERE, 'somefile.csv')

__file__是当前模块或脚本,的文件名os.path.dirname(__file__)是模块驻留在目录中。对于脚本, __file__可以是一个相对路径名,所以我们使用os.path.abspath()把这一进入绝对路径。

这意味着您可以在任何地方运行脚本。

如果要使脚本与任意 CSV输入文件一起使用,请使用命令行选项:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser('CSV importer')
    parser.add_argument('csvfile', type=argparse.FileType('w'),
                        default='somedefaultfilename.csv')
    options = parser.parse_args()
    import_function(options.csvfile)

其中, csvfile将是一个打开的文件对象,因此import_function()可以执行以下操作:

def import_function(csvfile):
    with csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            # etc.    

如果您不打算在csv文件中移动太多,最好的答案是将csv文件夹的绝对路径硬编码到脚本中。

import os

csvdir = "/path/to/csv/dir"
csvfpath = os.path.join(csvdir, "myfile.csv")
csvfile = open(csvfpath)

您还可以使用argparse类的命令行解析器,使用户轻松更改csv文件的路径。

当您要移动包含脚本和csv文件的文件夹时,才能使用Martijn Pieters的解决方案。 但是,在这种情况下,您也可以只使用csv文件的相对路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM