0

我的views.py文件代码:

#!/usr/bin/python 

from django.template import loader, RequestContext
from django.http import HttpResponse
#from skey import find_root_tags, count, sorting_list
from search.models import Keywords
from django.shortcuts import render_to_response as rr

def front_page(request):

    if request.method == 'POST' :
        from skey import find_root_tags, count, sorting_list
        str1 = request.POST['word'] 
        fo = open("/home/pooja/Desktop/xml.txt","r")

        for i in range(count.__len__()):

            file = fo.readline()
            file = file.rstrip('\n')
            find_root_tags(file,str1,i) 

            list.append((file,count[i]))

        sorting_list(list)

        for name, count1 in list:
            s = Keywords(file_name=name,frequency_count=count1)
            s.save()

        fo.close()

        list1 = Keywords.objects.all()
        t = loader.get_template('search/results.html')
        c = RequestContext({'list1':list1,
        })

        return HttpResponse(t.render(c))

    else :  
        str1 = ''
        list = []
        template = loader.get_template('search/front_page.html')
        c = RequestContext(request)
        response = template.render(c)
        return HttpResponse(response)

我在函数中发送的变量“文件”find_root_tags(file,str1,i)有一个 xml 文件的名称。该文件存在于我的桌面上,并且此代码编写在我的 django 应用程序的 views.py 文件中,因此无法打开该文件。我如何打开该文件,因为 xml.txt 包含要读取然后打开的相似文件名。简而言之,我怎样才能将文件参数发送为:

file1 = '/home/pooja/Desktop/<filename>'

这里<filename>等于存储在变量中的值,file并且最终可以将其称为:

find_root_tags(file1, str1, i)

///////////////////////////////////////// ///////////////////////////////////

澄清:

1)请参考变量“文件”,您可以在其中看到我正在存储xml.txt的读取内容。

2)xml.txt 包含 xml 文件名。views.py 文件是 django 应用程序的一部分,由于它们存在于桌面上,因此无法打开这些文件。

3)我的问题是如何修改和发送包含文件名的文件变量附加它的绝对路径,即:

'/home/pooja/Desktop/filename'

通过这样做,它将打开桌面上存在的文件。

4

2 回答 2

1

尝试这个:

pathh='/home/pooja/Desktop/'      #set the base path       
fo = open("/home/pooja/Desktop/xml.txt")
for i in range(len(count)):     #use len(count)
    file = fo.readline()
    file = file.strip()          #use strip()
    find_root_tags(pathh+file,str1,i) #base path+file
    mylist.append((file,count[i]))   #using 'list' as a variable name is not good
于 2012-07-04T13:20:33.523 回答
0

因此,如果我理解您的问题,该文件/home/pooja/Desktop/xml.txt包含文件名,每行一个,相对于/home/pooja/Desktop/,您需要将完整路径名传递给find_root_tags.

在 Python 中,您可以使用+来连接字符串,因此您可以执行以下操作:

files_path = "/home/pooja/Desktop/"

for i in range(len(count)):

    file = fo.readline()
    file = file.rstrip('\n')
    find_root_tags(files_path + file, str1, i) 

    list.append((file,count[i]))

旁白

首先,请注意我已将您的替换count.__len__len(count). 在 Python 中,魔术方法,即形式__xxxx__的方法不被直接调用。它们被定义为由其他机制调用。对于len方法,在使用内置时会在内部调用len()

其次,请注意,如果您的行xml.txt数少于len(count),那么fo.readline一旦您阅读了文件的所有行,就会引发异常。在 Python 中读取文件所有行的常用方法是:

my_file = open("/path/to/file", 'r')
for line in my_file:
    # do something with your line

最后,为了确保无论发生什么都关闭您的文件,即即使在您读取文件时引发异常,您也可以使用with 语句

因此,在您的示例中,您将执行以下操作:

files_path = "/home/pooja/Desktop/"
with open("/path/to/file", 'r') as my_file:
    for file in my_file:
        file = file.rstrip('\n')
        find_root_tags(files_path + file, str1, i) 

        list.append((file,count[i]))
于 2012-07-04T13:14:43.383 回答