目前,我已经创建了一个代码,可以根据 .csv 文件中的数据制作图表。但是,如果该代码存在于包含 csv 文件的文件夹中,我只能运行该代码。如何制作脚本文件,使其不必与 .csv 文件位于同一目录中。
问问题
125 次
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 回答