Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以更具Python风格的方式访问我的程序文件夹中的文件_Python_Filepath - Fatal编程技术网

以更具Python风格的方式访问我的程序文件夹中的文件

以更具Python风格的方式访问我的程序文件夹中的文件,python,filepath,Python,Filepath,我的程序使用csv文件加载一些初始化信息 我有一个从这个csv文件加载数据的配置文件。作为这个程序的一部分,我正在构建一个web应用程序,配置文件可以从整个应用程序的各个点访问 该程序必须跨平台运行 问题:根据调用配置文件的人以及调用方在文件树中的位置,csv操作会抛出IOError错误。csv数据甚至不会被访问,但在导入配置文件时,csv读取部分仍会执行 下面的代码到处都是创可贴 # print os.getcwd() try: with open('value_addresses.c

我的程序使用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]

我将把公共代码重构成一个函数

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\u addresses.csv

的路径,您可以进一步简化此过程。我将这样做:

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,但无论哪种方式,这都是我通常采用的方法。

您是否想过使用绝对路径而不是相对路径?您是否可以发布跟踪?这只是一个未找到的文件,所以您正在查找它吗?@DarinDouglass这不是一个选项,因为这必须在我的开发机器和服务器上以及它最终所在的任何其他机器上工作。不过,主文件夹中的文件结构不会更改。@woot我现在没有跟踪。这是一个“未找到文件”错误。但我不是在“寻找”它。该文件位于my folder Structure中的一个已知位置,这会增加代码行数EDIT:nevermind。我应该数一数