1

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

4

2 回答 2

1

假设您的意思是在代码中包含一个固定的 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)

wherecsvfile将是一个打开的文件对象,所以你import_function()可以这样做:

def import_function(csvfile):
    with csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            # etc.    
于 2013-07-24T14:04:11.703 回答
0

如果您不打算过多地移动 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 文件的相对路径。

于 2013-07-24T14:44:02.480 回答