I am facing strange problem. My django framework getting argument from template to retrieve data after reading text file. During testing it is doing perfect job. But when I am passing same argument from two browsers at same time I am getting following error for one of the browser:
IOError at /search/
[Errno 2] No such file or directory:
Although I know file is there and my python script can read it. So I am wondering anyone face this kind of problem in past!! What is the best way to handle file for retrieve data in Django. Thanks
part of code of my django project
def search(request):
if 'searchterm' in request.GET and request.GET['searchterm']:
searchterm=request.GET['searchterm']
searchtype= request.GET['searchtype']
if len(searchterm)>0:
pepfile = open(settings.BASE_DIR+'/filetoread/ReportBook_active_optimization.csv','r')
contextres ={}
concenrange={}
for line in pepfile:
data=line.strip()
if not data.startswith('txtPeptideID'):
info= data.split('\t')
acclist=[]
if searchtype =='Protein' and (str(searchterm)).lower() in info[2].lower():
for items in info[2].split('|'):
if (str(searchterm)).lower() in (items.strip()).lower():
itemsindex=(info[2].split('|')).index(items)
acclist.append((info[3].split('|'))[itemsindex])
transcountag6490=0
transpath=settings.BASE_DIR+'/tranisitionfilestoread'
curr_dir = os.getcwd()
os.chdir(transpath)
with open('transitions_6490_Agilent.csv', 'r') as transcountag6490file:
for line in transcountag6490file:
if str(pepid) in line:
transcountag6490=1
else:
transcountag6490=0
transcountag6490file.close()
return render(request, 'resultform.html', {'contextresultinfo': contextres, 'query': searchterm})
else:
return render(request, 'index.html', {'error': True})
else:
return render(request, 'index.html', {'error': True})
Full trace of error:
IOError at /search/
[Errno 2] No such file or directory: 'transitions_6490_Agilent.csv'
Request Method: GET
Request URL: http:/127.0.0.1:8000/:8000/search/?searchtype=Any& searchterm=PEP2012090602
Django Version: 1.8.11
Exception Type: IOError
Exception Value:
[Errno 2] No such file or directory: 'transitions_6490_Agilent.csv'
Exception Location: /home/paul/Desktop/djangoproject/trackerdatabase/src/trackerapp/views.py in search, line 188
Python Executable: /usr/bin/python
Python Version: 2.7.6
Python Path:
['/home/paul/Desktop/djangoproject/trackerdatabase/src',
'/usr/local/lib/python2.7/dist-packages/setuptools-20.3.1-py2.7.egg',
'/usr/local/lib/python2.7/dist-packages/pip-8.1.1-py2.7.egg',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
I'll leave it here as an answer for easier finding by other SO members.
You don't need to make os.chdir
, just provide the whole path to the file directly to open()
call.
file_path = os.path.join(settings.BASE_DIR, 'tranisitionfilestoread', 'transitions_6490_Agilent.csv')
with open(file_path, 'r') as f:
# do stuff