目前,我已经创建了一个代码,可以根据.csv文件中的数据生成图表。但是,如果该代码存在于带有csv文件的文件夹中,我只能运行代码。如何创建脚本文件,使其不必与.csv文件位于同一目录中。
答案 0 :(得分: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__
可以是相对路径名,因此我们使用{{ 1}}将其转换为绝对路径。
这意味着您可以从任何地方运行脚本。
如果您打算让您的脚本使用任意 CSV输入文件,请使用命令行选项:
os.path.abspath()
其中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()
答案 1 :(得分: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文件的相对路径。