我的程序使用csv文件加载一些初始化信息。
我有一个配置文件,可以从此csv文件加载数据。我正在构建一个Web应用程序作为该程序的一部分,并且可以从整个应用程序中的各个点访问配置文件。
该程序必须跨平台运行。
问题:根据调用配置文件的人以及调用者在文件树中的位置,csv操作会导致IOError
错误。甚至没有访问csv数据,但是在导入配置文件时,无论如何都会执行csv读取部分。
以下代码充斥着创可贴......
# print os.getcwd()
try:
with open('value_addresses.csv') as file: # located in code folder. used extensively below
reader = csv.reader(file)
lines = [l for l in reader]
except IOError:
try:
with open('_code/value_addresses.csv') as file: #
reader = csv.reader(file)
lines = [l for l in reader]
except IOError:
with open('../_code/value_addresses.csv') as file: #
reader = csv.reader(file)
lines = [l for l in reader]
答案 0 :(得分:0)
我会将公共代码重构为函数。
def read_file(path):
with open(path) as file:
reader = csv.reader(file)
lines = [l for l in reader]
return lines
try:
read_file("value_addresses.csv")
except IOError:
try:
read_file('_code/value_addresses.csv')
except IOError:
read_file('../_code/value_addresses.csv')
您可以通过递归计算value_addresses.csv
的路径来进一步简化这一过程。
答案 1 :(得分:0)
我就是这样做的:
from os.path import join
import csv
def myopen( filename, possible_dirs, mode ):
for dir in possible_dirs:
try:
return open(join(dir,filename),mode)
except IOError:
pass
raise IOError('File not found.')
with myopen('value_addresses.csv',['.','_code','../_code'],'r') as file:
reader = csv.reader(file)
lines = [l for l in reader]
虽然您可能希望更多地了解您所获得的特定IOError,但无论哪种方式,这都是我将采用的一般方法。