Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 django读取文本文件以检索数据_Python_Django_Ioerror - Fatal编程技术网

Python django读取文本文件以检索数据

Python django读取文本文件以检索数据,python,django,ioerror,Python,Django,Ioerror,我面临着一个奇怪的问题。我的django框架从模板获取参数,以便在读取文本文件后检索数据。在测试过程中,它做得非常好。但当我同时从两个浏览器传递相同的参数时,其中一个浏览器出现以下错误: IOError at /search/ [Errno 2] No such file or directory: 虽然我知道文件在那个里,我的python脚本可以读取它。所以我想知道过去有没有人面临过这种问题!!在Django中处理文件以检索数据的最佳方法是什么。 谢谢 django项目的部分代码 def s

我面临着一个奇怪的问题。我的django框架从模板获取参数,以便在读取文本文件后检索数据。在测试过程中,它做得非常好。但当我同时从两个浏览器传递相同的参数时,其中一个浏览器出现以下错误:

IOError at /search/
[Errno 2] No such file or directory:
虽然我知道文件在那个里,我的python脚本可以读取它。所以我想知道过去有没有人面临过这种问题!!在Django中处理文件以检索数据的最佳方法是什么。 谢谢

django项目的部分代码

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})
错误的完整跟踪:

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']

我将把它留在这里作为一个答案,以便其他SO成员更容易找到

您不需要进行
os.chdir
,只需将文件的整个路径直接提供给
open()
调用即可

file_path = os.path.join(settings.BASE_DIR, 'tranisitionfilestoread', 'transitions_6490_Agilent.csv')
with open(file_path, 'r') as f:
    # do stuff

这实际上是特定于您的实现的。你需要共享你的代码,否则你没有提供足够的信息,其他人可以帮助你。我在我的项目中共享了代码。你在代码的某个地方为文件/目录定义了错误的路径。您可以显示完整的错误堆栈跟踪吗?添加了完整的错误堆栈跟踪代码中的目录名是
transisitionfilestoread
(额外i)-它是否与实际的目录名相对应?另外,尝试直接使用abs路径打开
.csv
文件,而不使用预防性
chdir
。尝试smth,比如
file\u path=os.path.join(settings.BASE\u DIR,'transisitionfilestoread','csv\u file\u name.csv')