2017-04-27 73 views
1

全局變量我有一個包含保存爲變量文件路徑文件global_vars.py使用文件路徑爲在Python

from pandas import Timestamp 
final_vol_path = 'datasets/final_vols.csv' 
final_price_path = 'datasets/final_prices.csv' 
final_start_date = Timestamp('2017-01-01') 

寫在一個類似的方式等變量。但是,我使用的數據讀取功能,嘗試做以下的file1.py時拋出FileNotFoundError

import scripts.global_vars as gv 
read_data(gv.final_vol_path, gv.final_price_path) # throws FileNotFoundError 
read_data('datasets/final_vols.csv', 'datasets/final_prices.csv') # this passes 

此外,我檢查的文件路徑,並已經得到了以下內容:

gv.final_vol_path == 'datasets/final_vols.csv' # returns True 
gv.final_price_path == 'datasets/final_prices.csv' # returns True 

此外,熊貓Timestamp對象處理沒有任何問題。

是否有任何解釋爲什麼當FileNotFoundError試圖訪問文件路徑作爲global_vars.py變量訪問文件路徑時拋出,但實際字符串傳入時不會拋出?

編輯:總的目錄結構如下:

working_dir 
L file1.py 
    L scripts 
     L global_vars.py 
    L datasets 
     L final_vols.csv 
     L final_prices.csv 

編輯2:我在try-catch塊添加,以保證功能的其餘部分不破,不知道這已經影響回溯,但這裏是我得到的:

Traceback (most recent call last): 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\runpy.py", line 
184, in _run_module_as_main 
     "__main__", mod_spec) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\runpy.py", line 85, in _run_code 
     exec(code, run_globals) 
     File "C:\Users\Ananth\Anaconda3\envs\analytics-cpu\Scripts\nose2.exe\__main__.py", line 9, in <module> 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 306, in discover 
     return main(*args, **kwargs) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 100, in __init__ 
     super(PluggableTestProgram, self).__init__(**kw) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\unittest\main.py", line 93, in __init__ 
     self.parseArgs(argv) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 133, in parseArgs 
     self.createTests() 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 258, in createTests 
     self.testNames, self.module) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\loader.py", line 69, in loadTestsFromNames 
     for name in event.names] 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\loader.py", line 69, in <listcomp> 
     for name in event.names] 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\loader.py", line 84, in loadTestsFromName 

     result = self.session.hooks.loadTestsFromName(event) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\events.py", line 224, in __call__ 
     result = getattr(plugin, self.method)(event) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\plugins\loader\testcases.py", line 56, in loadTestsFromName 
     result = util.test_from_name(name, module) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\util.py", line 106, in test_from_name 
     parent, obj = object_from_name(name, module) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\util.py", line 117, in object_from_name 
     module = __import__('.'.join(parts_copy)) 
     File "C:\Users\Ananth\Desktop\Modules\PortfolioVARModule\tests\test_simulation.py", line 24, in <module> 
     gv.test_start_date) 
     File "C:\Users\Ananth\Desktop\Modules\PortfolioVARModule\scripts\prep_data.py", line 119, in read_data 
     priceDF = pd.read_csv(pricepath).dropna() 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 646, in parser_f 
     return _read(filepath_or_buffer, kwds) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 389, in _read 
     parser = TextFileReader(filepath_or_buffer, **kwds) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 730, in __init__ 
     self._make_engine(self.engine) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 923, in _make_engine 
     self._engine = CParserWrapper(self.f, **self.options) 
     File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 1390, in __init__ 
     self._reader = _parser.TextReader(src, **kwds) 
     File "pandas\parser.pyx", line 373, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:4184) 
     File "pandas\parser.pyx", line 667, in pandas.parser.TextReader._setup_parser_source (pandas\parser.c:8449) 
    FileNotFoundError: File b'datasets/corn_price.csv' does not exist 
+0

如果使用完整路徑,會發生什麼情況? –

+0

'print gv.final_vol_path'返回什麼? 我猜測unicode問題。 – Trolldejo

+0

@PedroLobito我試過指定絕對路徑,它仍然會拋出相同的'FileNotFoundError',即使我可以在目錄中看到該文件。不完全確定爲什麼。 –

回答

2

問題是在文件的路徑前面加上字母b。 因爲你編碼爲utf-8,所以你得到了b。 Try:

read_data(str(gv.final_vol_path,'utf-8'), str(gv.final_price_path, 'utf-8')) 
+0

這不起作用,錯誤只是更改爲'FileNotFoundError:文件b'atasets/final_vols.csv'不存在' –

+0

是的,我注意到,當我發佈它時,我更新了我的答案。 – Trolldejo

+0

像魅力一樣工作,謝謝! –